我知道如何创建一个跟踪远程分支的新分支,但是如何使现有分支跟踪远程分支?
我知道我可以编辑 .git/config
文件,但似乎应该有更简单的方法.
我知道如何创建一个跟踪远程分支的新分支,但是如何使现有分支跟踪远程分支?
我知道我可以编辑 .git/config
文件,但似乎应该有更简单的方法.
Given a branch foo
and a remote upstream
:
As of Git 1.8.0:
git branch -u upstream/foo
Or, if local branch foo
is not the current branch:
git branch -u upstream/foo foo
Or, if you like to type longer commands, these are equivalent to the above two:
git branch --set-upstream-to=upstream/foo
git branch --set-upstream-to=upstream/foo foo
As of Git 1.7.0 (before 1.8.0):
git branch --set-upstream foo upstream/foo
Notes:
foo
to track remote branch foo
from remote upstream
.git fetch upstream
beforehand.See also: Why do I need to do `--set-upstream` all the time?
You can do the following (assuming you are checked out on master and want to push to a remote branch master):
Set up the 'remote' if you don't have it already
git remote add origin ssh://...
Now configure master to know to track:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
And push:
git push origin master
</div>
Editing .git/config
is probably the easiest and fastest way. That's what the Git commands for handling remote branches are doing, anyway.
If you don't want to muck with the file by hand (and it's not that hard to do), you can always use git config
to do it...but again, that's just going to edit the .git/config
file, anyway.
There are, of course, ways to automatically track a remote branch when using git checkout
(by passing the --track
flag, for example), but these commands work with new branches, not existing ones.
In very short
git branch --set-upstream yourLocalBranchName origin/develop
This will make your yourLocalBranchName
track the remote branch called develop
.
For 1.6.x, it can be done using the git_remote_branch tool:
grb track foo upstream
That will cause Git to make foo
track upstream/foo
.
After a git pull
:
git checkout --track <remote-branch-name>
Or:
git fetch && git checkout <branch-name>
For git version 2.25.1
, use the command:
git push --set-upstream origin <local_branch_name>
This isn't a direct answer to this question, but I wanted to leave a note here for anyone who may be having the same issue as me when trying to configure an upstream branch.
Be wary of push.default.
With older git versions, the default was matching, which would cause very undesirable behaviour if you have, for example:
Local branch "master" tracking to origin/master
Remote branch "upstream" tracking to upstream/master
If you tried to "git push" when on the "upstream" branch, with push.default matching git would automatically try to merge the local branch "master" into "upstream/master", causing a whole lot of chaos.
This gives more sane behaviour:
git config --global push.default upstream
or simply by :
switch to the branch if you are not in it already:
[za]$ git checkout branch_name
run
[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
and you ready to :
[za]$ git push origin branch_name
You can alawys take a look at the config file to see what is tracking what by running:
[za]$ git config -e
It's also nice to know this, it shows which branches are tracked and which ones are not. :
[za]$ git remote show origin
</div>