当我通过Git Extensions将新分支推送到远程存储库时,我收到警告说
The branch {branch name} does not have a tracking reference. Do
you want to add a tracking reference for {branch name}?
什么是跟踪参考?我发现在Google中只提及跟踪参考文献,但没有真正的定义。
答案 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
上设有名为next
和todo
的分支。
% 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
在这种情况下,我们有本地分支master
,b1
,b2
和b3
。 master
分支正在跟踪名为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