79

当我通过 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

4 回答 4

38

基本思想是有纯粹的本地引用(例如,分支、标签),然后有远程跟踪引用,这些引用遵循其他 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在这里,我们在callnext和上有分支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.

于 2013-03-13T03:46:27.340 回答
16

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

但是,如果您在本地创建新分支,然后将其推送到远程存储库,则必须明确告诉 git 您是否希望本地分支开始跟踪新的远程分支。将本地分支推送到远程存储库时,您可以使用-uor选项执行此操作: .--set-upstreamgit 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、和。该分支正在跟踪一个名为 的远程分支,该分支没有跟踪任何远程分支,该分支正在跟踪一个名为 的远程分支,该分支正在跟踪一个名为的远程分支。还显示与跟踪的分支相关的分支的状态。这里的分支是被跟踪的远程分支之前的 1 个提交,并且其他分支是最新的,它们各自的远程跟踪分支。b1b2b3mastermasterb1b2b2b3r1git branch -vvb3

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

于 2016-01-18T19:00:00.133 回答
7

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

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

  • 与远程工作相比,它们用于链接您在本地工作的内容。

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

  • 更好的是,git status 会识别出你在远程版本分支前提交了多少次。

于 2013-10-01T04:21:34.767 回答
6

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

于 2018-01-29T22:44:11.077 回答