git - tag回滚 - 什么是跟踪参考?




sourcetree打tag (3)

Nick Quaranto的优秀博客git ready有一篇解释远程跟踪分支的帖子:

远程跟踪分支有几个不同的目的:

  • 它们用来链接你在本地工作的东西和遥控器上的东西。

  • 当你使用git pull或git fetch时,他们会自动知道要从哪个远程分支获得更改。

  • 更好的是,git status会识别他在远程版本的分支前面有多少提交。

当我通过Git Extensions将新分支推送到远程存储库时,我收到一条警报说

The branch {branch name} does not have a tracking reference. Do
you want to add a tracking reference for {branch name}?

什么是跟踪参考? 我发现只有少数提到跟踪谷歌的参考文献,没有真正的定义。


基本思想是有纯粹的本地引用(例如,分支,标签),然后有远程跟踪引用,它遵循其他repos中发生的事情。 因为Git是分散的,所以你可以选择一个与遥控器中使用的分支相同的分支名称,而不知道另一个分支的名称,这样他们对它们的工作完全不同。 Git允许您这样做,但它也提供了一种将本地引用链接到远程引用的方法。

例如,请考虑以下事项:

% git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/maint
  remotes/origin/master
  remotes/origin/next
  remotes/origin/pu
  remotes/origin/todo

在这里,我们有next名为nexttodo分支。

% git checkout -t remotes/origin/next
Branch next set up to track remote branch next from origin.
Switched to a new branch 'next'
% git branch todo    

现在我们有一个本地分支,它跟踪同名的远程分支和本地分支todo ,它们不会通过对remotes/origin/todo更改进行更新。


本地git分支可以跟踪远程分支,这意味着git push和git pull命令将知道默认情况下推送和提取跟踪分支的提交。 此外,git status将告知当前本地分支与其正在跟踪的远程分支之间的状态。 当您克隆git存储库时,git将向本地主分支添加跟踪引用以跟踪远程主分支。 当您从新的远程分支签出时,git将向创建的本地分支添加跟踪引用,以跟踪您签出的远程分支。

但是,如果在本地创建新分支,然后将其推送到远程存储库,则必须明确告诉git是否希望本地分支开始跟踪新的远程分支。 在将本地分支推送到远程存储库时,可以使用-u--set-upstream选项执行此操作: git push -u origin my-new-branch

您可以使用命令git branch -vv检查本地分支正在跟踪哪些远程分支(如果有) - 下面是输出的一个小示例。

  b1     560eb64 Added file.txt
  b2     560eb64 [origin/b2] Added file.txt
  b3     b638c18 [origin/r1: ahead 1] Added file3.txt
* master 560eb64 [origin/master] Added file.txt

在这种情况下,我们有本地分支masterb1b2b3master分支正在跟踪一个名为master的远程分支, b1分支不跟踪任何远程分支, b2分支正在跟踪一个名为b2的远程分支,而b3分支正在跟踪一个名为r1的远程分支。 git branch -vv还显示与跟踪分支相关的分支的状态。 这里,分支b3在跟踪的远程分支之前是1次提交,而其他分支与它们各自的远程跟踪分支是最新的。

因此,如果您创建本地分支并推送到远程存储库,是否要向分支添加跟踪引用? 通常,当您将新的本地分支推送到远程存储库时,您可以在功能上与其他开发人员协作。 如果您向本地分支添加跟踪引用,则可以方便地将其他人所做的更改提取到分支,因此我想说在大多数情况下您需要添加跟踪引用。





git-extensions