git checkout -b#
In these examples, the remote is named
gl because I use Gitlab a lot and name my Gitlab remote repos as
gl instead of the default
We all use
git checkout -b new-branch to create a new branch from time to time.
Generally, we first switch to
develop, update it and then from there create the new branch:
$ git checkout main $ git fetch main $ git reset --hard gl/main $ git checkout -b new-branch
If you now do:
$ git branch -vv | grep new-branch * my-branch 123aaa9 The commit message here
That includes no tracking branch information.
But we can also use
-b to create a branch from some other branch (instead of from the one we currently are):
$ git fetch gl main $ git checkout -b other-branch gl/main $ git branch -vv | grep other-branch branch 'other-branch' set up to track 'gl/main'. Switched to a new branch 'other-branch' $ git branch -vv | grep other-branch * other-branch bfc8d31 [gl/main] The commit message here
Specially note the bit “branch ‘other-branch’ set up to track ‘gl/main’”.
This is significant.
It means if you now push without specifying which branch to push to, it will send changes to
main (which could be catastrophic).
It can be fixed by setting it a new upstream to a remote branch with the same name as the local branch:
$ git push origin --set-upstream other-branch:other-branch ... some output omitted for brevity ... * [new branch] other-branch -> other-branch branch 'other-branch' set up to track 'gl/other-branch'.
As it can be seen, it sets the local
other-branch to track the remote
It is possible to use
--no-track to create a branch from another branch, which is probably a safer approach than mistakenly create a branch that tracks
main and then fix it in a subsequent command, as we did above.
We could do this instead:
$ git checkout -b other-branch --no-track gl/main Switched to a new branch 'other-branch' $ git branch -vv | grep other-branch * other-branch bfc8d31 The commit message here
Note it just says “Switched to a new branch ‘other-branch’” without any mentions to making it track some other branch.