The ProGit 书籍 http://git-scm.com/book has 一个很好的解释 http://git-scm.com/book/en/Git-Branching-Remote-Branches#_tracking_branches:
追踪分支机构
从远程分支检出本地分支会自动创建所谓的跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。如果您位于跟踪分支并输入git push
,Git 自动知道要推送到哪个服务器和分支。另外,跑步git pull
while 在这些分支之一上获取所有远程引用,然后自动合并到相应的远程分支中。
当您克隆存储库时,它通常会自动创建一个跟踪 origin/master 的 master 分支。这就是为什么git push
and git pull
开箱即用,没有其他参数。但是,如果您愿意,您可以设置其他跟踪分支 - 不跟踪源分支且不跟踪主分支的分支。简单的情况就是您刚刚看到的示例,运行git checkout -b [branch] [remotename]/[branch]
。如果您有 Git 版本 1.6.2 或更高版本,您还可以使用--track
速记:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"
要设置与远程分支名称不同的本地分支,您可以轻松使用具有不同本地分支名称的第一个版本:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"
现在,您当地的分支机构sf
会自动推入和拉出origin/serverfix
.
奖金:额外git status
info
有了跟踪分支,git status
会告诉你你的跟踪分支落后了多远 - 提醒你你还没有推送你的更改!它看起来像这样:
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
or
$ git status
On branch dev
Your branch and 'origin/dev' have diverged,
and have 3 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)