什么是跟踪参考?

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

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

什么是跟踪参考? 我发现只有几个跟踪谷歌参考的提及,没有真正的定义。

基本思想是纯粹的本地引用(如分支,标签),然后有远程跟踪引用,这跟随其他回购站发生的事情。 因为Git是分散的,所以你可以select一个与远程使用的分支相同的名字,而不必知道另一个分支的名字,这样他们就完全不同了。 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 

在这里,我们有分支的originnexttodo

 % 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

Nick Quaranto出色的博客git ready有一个解释远程跟踪分支的post:

远程追踪分行有几个不同的目的:

  • 他们习惯于把你在本地工作的东西与遥控器上的东西联系起来。

  • 当你使用git pull或者git fetch的时候,他们会自动的知道远程分支是如何变化的。

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

一个本地的git分支可以跟踪一个远程分支,这意味着git push和git pull命令将知道默认情况下推送和从被跟踪分支提交提交。 另外git状态会告诉您当前的本地分支和它正在跟踪的远程分支之间的状态。 当你克隆一个git仓库时,git会为本地主分支添加一个跟踪引用来跟踪远程主分支。 当你从一个新的远程分支结帐时,git会添加一个跟踪引用到创build的本地分支来跟踪你签出的远程分支。

但是,如果你在本地创build一个新的分支,然后把它推送到远程仓库,你必须明确地告诉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是在被跟踪的远程分支之前提交的,而其他分支与它们各自的远程跟踪分支是最新的。

所以,如果你创build一个本地分支并推送到远程仓库,你想添加一个跟踪引用到分支? 通常,当您将新的本地分支推送到远程存储库时,您可以在其他function上与其他开发人员协作。 如果您将跟踪引用添加到本地分支,则可以方便地将其他人对分支所做的更改提取出来,所以在大多数情况下,您希望添加跟踪引用。