Working in parallel
So far, all commits appeared in a single line. It is possible to have multiple lines of development, each line for a separate feature. This is called a branch, and it can be used to develop multiple features at the same, or making fixes for older editions of the software while working on the next version.
When a branch is started, the chain of commits is no longer grows in a straight line, but in two:
To keep track of all commits, each branch is referenced by a label. The "mainline" branch is called master.
In Git, branches are often used to develop separate features. Only once the feature is stable, it will be integrated with the main line of development.
Starting a branch
Branches are started with the following commands:
- Making a branch, and committing it in:
git branch iss53
# create the branch (see figure 1)git checkout iss53
# switch to it...
# edit a filegit commit -a
# commit the change in the new branch (see figure 2)
The following will happen:
Returning to the master branch
With the git checkout command, we can switch back to the master branch.
- Switching back to master:
git checkout master
Each time you switch between branches, the files in your working copy are replaced with the versions from the particular branch you checkout.
From the master branch, another commit can be created.
- Adding a commit in the master branch:
edit file2.html git commit -a
And notice how things start to diverge:
To keep an overview, the following commands are recommended:
- Keeping an overview of branches:
# shows a list of local branchesgit log --all --graph --decorate
# show commits as graph with labels
I can recommend making an alias of that one:
- Useful aliases for branches:
git config --global alias.log-graph "log --all --graph --decorate"
Notice how that command displays the branch label at the final commit. Git deals with branches this way; they are just a label pointing to the last commit of the chain.
- Convenience tip
Instead of typing:
git branch name
git checkout name
you can do this at once with:
git checkout -b name
When a feature is completed, the next task is merging a branch.
The figures are used from the Pro Git book, chapter 3.2, which explains branches very well.