About
This page talks about Branch management in Git.
For Git, a branch is:
- that represents a commit chain
Example of commit log (or log):
CA1--CA2--CA3 <-- Branch A (last commit CA3)
/
C1--C2--C3 <-- master (last commit C3)
\
CB1--CB2 <-- Branch B (last commit CB2)
- A commit represents the state of your file system at a point in time.
- Because the commit log is a directed acyclique graph, each leaf commit is a branch
What is a Head ?
The term “branch head” (or just “head”) reference to the most recent commit on a branch.
In the example above, the branch head of:
- the branch A is the commit CA3
- the branch B is the commit CB2
If you are not on a last commit, you are no more on a branch, you are in a detached mode
Name
The identification of branch may have a / or a space
- With a slash, you're referring to a remote-tracking branch (local)
remote/name
- With a space, , you're referring to a remote branch (branch on a remote machine over the network)
remote name
A branch name is just a ref (A name attached to a commit sha).
Type
Local
A local branch is a branch that exists only on your computer.
A local tracking branch is a local branch that is tracking another branch.
Remote Tracking
- A remote-tracking branch is a local copy of a remote branch.
Remote
See remote branch
Tag
Fork
See:
Usage / Strategy
Creating two features branch:
- heart glasses
- cowboy hat
Each feature is added back to the master individually. So if glasses are finished before the cowboy hat, no problem.
More see Workflow
Example of lifecycle
Example of workflow
# Create a feature branch
git checkout -b feature-myfeature develop
# Merge your work
git checkout develop
git merge --no-ff feature-myfeature
# Delete your branch
git branch -d feature-myfeature
# Integrate your work into the master repo
git push origin develop
Management
The git docs/git-branch.html command lists, creates, or delete branches.
Working / Current
The working or current branch is the branch actually in the working tree.
More… see current
Rename
Create
Update
Keeping your branch current with a parent branch (master for instance)
When merging two branches, Git check the commit sha of the branche ref and add the missing's one accordingly.
Example:
Update the master / main branch
- Switch to the local copy of master
git checkout master
git fetch origin
:: git fetch upstream
git merge origin/master
:: git merge usptream/master
Update the branch (Rebase)
- Go to the branch (ie checkout the files for this branch from the repository)
git checkout branchName
git rebase master
Ctrl + T shortcut on IDEA
Fetch
fetch all the remote branches from origin
git fetch origin
List
- Branch in a server: Remote tracking
git branch --remotes
# or
git branch -r
Checkout
Check out an existing branch
Remote Checkout
cd path/to/git/repository
git fetch origin
git checkout brancheName
git checkout brancheName
Switched to a new branch 'brancheName'
Branch 'brancheName' set up to track remote branch 'brancheName' from 'origin'.
The branch is now a remote tracking branch (a local branch that tracks the remote branch
where:
From a tag
See Tag
Switch
- Switch does not require a clean index and working tree (i.e. no differences compared to HEAD)
- The working tree and the index are updated to match the branch.
- All new commits are added to the tip of this branch.
git switch
Example:
- After working in the wrong branch, switching to the correct branch would be done using:
git switch -m mytopic
where m performs a three-way merge
In case of modification
Stash
git stash # keep the modification in a stash branch
git pull # get the last one
git stash pop # Destash the modification
Revert to head
Revert to the head of the upstream/master branch
git reset --hard upstream/master
Switch
See Checkout
git checkout branchName
Switched to branch 'branchName'
Share
When you want to share a branch with the world, you need to push it up to a remote that you have write access to.
git push <remote> <branch>
Delete
- delete branch locally
git branch -d branchName
- delete a branch remotely with push
git push origin --delete branchName

