有人可以解释适用于 git 的“跟踪分支”吗?
这是来自git-scm.com的定义:
Git 中的“跟踪分支”是连接到远程分支的本地分支。当您推拉该分支时,它会自动推拉到与其连接的远程分支。 如果您总是从同一个上游分支拉入新分支,并且不想显式使用“git pull”,请使用此选项。
Git 中的“跟踪分支”是连接到远程分支的本地分支。当您推拉该分支时,它会自动推拉到与其连接的远程分支。
如果您总是从同一个上游分支拉入新分支,并且不想显式使用“git pull”,请使用此选项。
不幸的是,对于 git 和来自 SVN 的新手来说,这个定义对我来说完全没有意义。
我正在阅读“ The Pragmatic Guide to Git ”(顺便说一句,很棒的书),他们似乎建议跟踪分支是一件好事,并且在创建您的第一个远程(在本例中为源)之后,您应该将您的主分支设置为跟踪分支,但不幸的是,它没有 说明为什么跟踪分支是一件好事 ,或者 通过将主分支设置为源存储库的跟踪分支可以获得什么好处 。
有人可以请教我(英文)吗?
ProGit书有一个很好的解释:
跟踪分支
从远程分支检出本地分支会自动创建所谓的跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。如果您在跟踪分支上并键入git push,Git 会自动知道要推送到哪个服务器和分支。此外,git pull在这些分支之一上运行时会获取所有远程引用,然后自动合并到相应的远程分支中。
git push
git pull
当你克隆一个存储库时,它通常会自动创建一个 master 分支来跟踪 origin/master。这就是为什么git push并且git pull开箱即用,没有其他争论。但是,如果您希望“不跟踪原始分支而不跟踪主分支的分支”,您可以设置其他跟踪分支。简单的例子就是你刚才看到的例子,运行git checkout -b [branch] [remotename]/[branch]. 如果你有 Git 1.6.2 或更高版本,你也可以使用--track简写:
git checkout -b [branch] [remotename]/[branch]
--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.
sf
origin/serverfix
奖金:额外git status信息
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)