I am, too, a fan of typing just git pull
and getting all the magic.
You have 2 options:
1) git config --global branch.autoSetupMerge always
This will ensure that whether you checkout a remote branch, or create a new one; the tracking information will be handled automatically by git. Then you will be able to
git clone <some_repo>
git checkout -b <new_branch>
git push
git pull
Note that in order to push
without more keywords, you need to set the push option as well. I have set it to matching
, but everyone has their preference on that. (git config --global push.default matching
)
More info: autosetupmerge
defaults to true
. When set to true, this lets git to perform tracking when you checkout an already existing branch at the remote. For example, if you do git checkout <branch>
, git will handle the tracking info so that you can do git pull
while on that branch. However, it will not perform this on branches that you create with -b
option. Setting autosetupmerge
to always
ensures that git handles tracking info all the time.
2) When checking out a new branch, you need to specifically set the branch to pull from origin (aka tracking)
git checkout -b <branch> --track <remote>/<branch>
I find this less useful when the branches are transient. If you rarely create a new branch, you should go with this. However, if you are like me, where only the master branch is persistent and every feature has its own brand new branch, then I find option 1 more useful.
Note that, you do not need to make git configuration --global
. You may simply write --local
there, and have that setting specific to that repository only.