什么是追踪参考?

当我通过 Git 扩展将一个新分支推送到一个远程存储库时,会得到一个警告

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

什么是跟踪参考?我发现在谷歌中只有少数提到跟踪引用,而且没有真正的定义。

33606 次浏览

基本思想是,有纯粹的本地引用(例如,分支,标签) ,然后有远程跟踪引用,它遵循在其他回购协议中发生的事情。因为 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

这里我们有 origin上的分支,叫做 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

现在我们有一个本地分支 next,它跟踪同名的远程分支和本地分支 todo,这两个本地分支不会随着对 remotes/origin/todo的更改而更新。

Nick Quaranto 的优秀博客 准备好有一篇文章解释 远程跟踪分支机构:

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

  • 它们用来将你在本地的工作与 在遥控器上

  • 它们将自动知道从哪个远程分支获取更改 当你使用 git pull 或 git get 时

  • 更好的是,git 状态会识别出您已经进行了多少次提交 前面远程版的分支

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

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

您可以使用 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分支正在跟踪一个名为 b10的远程分支。b11还显示了与被跟踪分支相关的分支的状态。在这里,分支 b3比被跟踪的远程分支提前1次提交,其他分支与它们各自的远程跟踪分支保持最新。

因此,如果您创建一个本地分支并将其推送到远程存储库,您是否希望向该分支添加跟踪引用?通常,当您将一个新的本地分支推送到远程存储库时,您这样做是为了与其他开发人员在某个特性上进行协作。如果您向本地分支添加跟踪引用,那么您可以方便地提取其他人对分支所做的更改,所以我想说,在大多数情况下,您希望添加跟踪引用。

是的,您可能想要添加它。在控制台中执行以下操作:

git branch --set-upstream-to origin/master