小编典典

什么是跟踪分支?

all

有人可以解释适用于 git 的“跟踪分支”吗?

这是来自git-scm.com的定义:

Git 中的“跟踪分支”是连接到远程分支的本地分支。当您推拉该分支时,它会自动推拉到与其连接的远程分支。

如果您总是从同一个上游分支拉入新分支,并且不想显式使用“git pull”,请使用此选项。

不幸的是,对于 git 和来自 SVN 的新手来说,这个定义对我来说完全没有意义。

我正在阅读“ The Pragmatic Guide to
Git

”(顺便说一句,很棒的书),他们似乎建议跟踪分支是一件好事,并且在创建您的第一个远程(在本例中为源)之后,您应该将您的主分支设置为跟踪分支,但不幸的是,它没有
说明为什么跟踪分支是一件好事 ,或者 通过将主分支设置为源存储库的跟踪分支可以获得什么好处

有人可以请教我(英文)吗?


阅读 126

收藏
2022-06-07

共1个答案

小编典典

ProGit一个很好的解释

跟踪分支

从远程分支检出本地分支会自动创建所谓的跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。如果您在跟踪分支上并键入git push,Git
会自动知道要推送到哪个服务器和分支。此外,git pull在这些分支之一上运行时会获取所有远程引用,然后自动合并到相应的远程分支中。

当你克隆一个存储库时,它通常会自动创建一个 master 分支来跟踪 origin/master。这就是为什么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)
2022-06-07