该ProGit本书有一个很好的解释:
追踪分行
从远程分支签出本地分支会自动创建所谓的跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。如果您在跟踪分支上并输入git push
,则Git会自动知道要推送到哪个服务器和分支。同样,git pull
在这些分支之一上运行时,将获取所有远程引用,然后自动合并到相应的远程分支中。
克隆存储库时,它通常会自动创建一个主分支,该分支会跟踪源/主数据库。这就是为什么git push
,并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
信息
有了跟踪分支,它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)
要么
$ 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)
--track
选项来创建一个(本地)分支,该分支将这些远程跟踪分支之一设置为其上游。该术语已经2006年至2019年间有所发展,所以不同的人可能会通过这些词有时意味着不同的东西。