什么是跟踪参考?

时间:2013-03-13 01:01:38

标签: git git-extensions

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

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

什么是跟踪参考?我发现在Google中只提及跟踪参考文献,但没有真正的定义。

4 个答案:

答案 0 :(得分:24)

基本思想是有纯粹的本地引用(例如,分支,标签),然后有远程跟踪引用,它遵循其他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

我们在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

答案 1 :(得分:7)

本地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分支正在跟踪名为{{1的远程分支} b2分支正在跟踪名为b3的远程分支。 r1还显示与跟踪分支相关的分支的状态。这里,分支git branch -vv在跟踪的远程分支之前提交1次,其他分支与其各自的远程跟踪分支最新。

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

答案 2 :(得分:5)

Nick Quaranto的优秀博客 git ready 有一篇帖子解释remote tracking branches

  

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

     
      
  • 他们习惯将你在本地工作的东西与那些东西相比较   在遥控器上。

  •   
  • 他们会自动知道要从中获取更改的远程分支   当你使用git pull或git fetch时。

  •   
  • 更好的是,git status会认出你有多少提交   分支的远程版本的前面。

  •   

答案 3 :(得分:2)

是的,您可能想要添加它。在控制台中执行此操作:git branch --set-upstream-to origin / master