当前分支没有跟踪信息

val*_*999 497 git github git-pull

我一直在相对较短的时间内使用github,而且我总是使用客户端来执行提交和拉取.我决定昨天从git bash尝试它,我成功创建了一个新的repo和commit文件.

今天我从另一台计算机上对存储库进行了更改,我已经提交了更改,现在我回到家并执行了git pull更新我的本地版本,我得到了这个:

There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream develop origin/<branch>
Run Code Online (Sandbox Code Playgroud)

这个回购的唯一贡献者是我,并且没有分支(只是一个主人).我在Windows上,我从git bash执行了拉动:

在此输入图像描述

git状态:

$ git status
# On branch master
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

git branch:

$ git branch
* master
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Com*_*uid 826

您可以指定要拉出的分支:

git pull origin master
Run Code Online (Sandbox Code Playgroud)

或者你可以设置它,以便你的本地主分支跟踪github主分支作为上游:

git branch --set-upstream-to=origin/master master
git pull
Run Code Online (Sandbox Code Playgroud)

克隆存储库时会自动为您设置此分支跟踪(仅适用于默认分支),但如果将远程数据库添加到现有存储库,则必须自行设置跟踪.值得庆幸的是,git给出的建议很容易记住该怎么做.

  • 这似乎是一个令人遗憾的事态 - 我们真的需要为每个分支手动设置吗?为什么我们不能将origin设置为默认远程,然后将每个push/pull默认设置为具有相同名称的原始分支?这么难吗? (49认同)
  • 显然,-set-upstream在git 1.9.x中被弃用了.继续前进你想要使用类似`git branch -u origin/master`的东西,假设你已经检查过master.如果没有,`git branch -u origin/master master`将起作用. (14认同)
  • @BartRead更新它以使用新的更清晰的`--set-upstream-to =`语法.(这是`--set-upstream`的替代品) (5认同)
  • 啊,我这里的关键部分是,如果你放弃并重新创建一个遥控器,那么原始的"fetch"设置的跟踪就会丢失.因此需要再次设置它.:) (4认同)
  • 完善!有效.那么发生的事情是没有默认"git pull"的"默认分支"?那就是错误的原因? (2认同)
  • 要查看 origin 指向的位置,可以使用“git remote -v”。“-v”代表详细。 (2认同)

rjm*_*nro 36

请参阅:git checkout标记,git pull在分支中失败

如果像我这样你需要一直这样做,你可以设置一个别名,通过在.gitconfig文件中添加以下内容来自动完成:

[alias]
    set-upstream = \
       !git branch \
           --set-upstream-to=origin/`git symbolic-ref --short HEAD`
Run Code Online (Sandbox Code Playgroud)

当您看到消息There is no tracking information...,只需运行.gitconfig,然后There is no tracking information...再次.

感谢https://zarino.co.uk/post/git-set-upstream/

  • 这是一种将其添加到一行中的全局 `.gitconfig` 的方法(可以相应地修改本地或其他配置): `git config --global alias.set-upstream '!gitbranch --set-upstream-to =origin/$(git symbolic-ref --short HEAD)'` (5认同)
  • 在 git 2.37+ 中与此等效的“现代”是设置`git config --globalbranch.autoSetupMerge simple`(这样您只能在同名分支上获得自动跟踪,并且新名称分支是“独立的”),还有“git config --global push.autoSetupRemote true”(因此,当您在新的独立分支上执行“git Push”时,它会自动将您的新分支推送到远程,并设置对远程分支的跟踪。这样您就可以永远不需要“git set-upstream”,您可以按照您的预期进行分支、拉取和推送,并且对于同名远程分支来说,一切都将有效。 (4认同)

Coc*_*nut 35

步骤1

$ git pull
Run Code Online (Sandbox Code Playgroud)
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=<remote>/<branch> master
Run Code Online (Sandbox Code Playgroud)

第2步

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=<remote>/<branch> master
Run Code Online (Sandbox Code Playgroud)
Branch 'master' set up to track remote branch 'master' from 'origin'.
Run Code Online (Sandbox Code Playgroud)

步骤3

$ git branch -u origin/master
Run Code Online (Sandbox Code Playgroud)
Already up to date.
Run Code Online (Sandbox Code Playgroud)


IMS*_*SoP 27

对于任何想要理解为什么会发生这种情况的人来说,有一些相关的概念:

  • git 存储库可以有零个或多个“远程”,它们被命名为指向其他存储库的链接,通常位于某个中央服务器上。您可以使用“git Remote -v”列出它们
  • 如果您从另一台服务器克隆存储库,将为您设置一个名为“origin”的默认远程服务器。
  • git push 和 git pull 的完整语法都是指定远程名称和该远程上的分支。
  • 本地分支可以与远程分支关联,这样您就不必在每次拉取或推送时都键入它。
  • 如果您使用“git switchbranchname”或“git switch -u origin/branchname”从远程存储库签出分支,则会为您设置关联。(在这种情况下,“git switch”与“git checkout”相同)
  • 如果您在本地创建一个分支,然后使用 推送它git push -u origin,它将设置关联。
  • 但是,如果您在初始拉或推中不包含-u,则不会存储关联,因此您每次都必须具体。

正如其他答案所指出的,解决方案是设置与 的关联git branch --set-upstream-to=origin/branchname,其中origin是远程的名称,“branchname”是分支在远程服务器上的名称。这可能与它在本地的名称相同,但不一定如此。

  • 我不明白,当您将新分支推送到远程时,始终设置上游分支的默认行为有什么缺点?您没有解释为什么每次都需要明确管理它。为什么没有为此添加配置选项? (3认同)

Von*_*onC 26

使用 Git 2.24(2019 年第 4 季度),您不必这样做

git branch --set-upstream-to=origin/main main
git pull
Run Code Online (Sandbox Code Playgroud)

您将能够执行以下操作:

git pull --set-upstream-to=origin/main main
Run Code Online (Sandbox Code Playgroud)

更多信息请参阅“默认远程和分支使用-u选项 - 适用于push但不适用pull”。


请注意,使用 Git 2.37(2022 年第 3 季度),您有一个新选项push.autoSetupRemote

git config --global push.autoSetupRemote true
Run Code Online (Sandbox Code Playgroud)

那么一个简单的操作git push将与 相同git push --set-upstream-to=origin/main main,使下一个git pull 已经设置为从 检索提交origin/main


小智 14

发生这种情况是因为当前分支没有跟踪远程分支。所以你可以用两种方法来做到这一点。

  1. 使用特定分支名称拉取

    git pull origin master

  2. 或者您可以通过特定分支来跟踪到本地分支。

    git branch --set-upstream-to=origin/<branchName>

  • 为什么我关心“当前分支没有跟踪远程分支” (2认同)

Aer*_*rin 12

ComputerDruid的答案很棒,但我认为除非您愿意,否则必须手动设置上游.我正在添加这个答案,因为人们可能认为这是必要的一步.

如果您指定要拉出的遥控器,则此错误将消失,如下所示:

git pull origin master
Run Code Online (Sandbox Code Playgroud)

请注意,这origin是远程的名称,master是分支名称.


1)如何检查遥控器的名称

git remote -v
Run Code Online (Sandbox Code Playgroud)

2)如何查看存储库中可用的分支.

git branch -r
Run Code Online (Sandbox Code Playgroud)


小智 9

这个答案最适合

谁希望将他们的存储库链接到他们的项目并提交更改

根据椰子的回答

步骤1

git pull
Run Code Online (Sandbox Code Playgroud)
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=<remote>/<branch> master
Run Code Online (Sandbox Code Playgroud)

第2步

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=<remote>/<branch> master
Run Code Online (Sandbox Code Playgroud)
Branch 'master' set up to track remote branch 'master' from 'origin'.
Run Code Online (Sandbox Code Playgroud)

步骤3

git branch -u origin/master
Run Code Online (Sandbox Code Playgroud)
Already up to date.
Run Code Online (Sandbox Code Playgroud)

问题

我花了几个小时提交更改,然后按照上面的步骤操作, git add . git commit . 然后执行了下面的步骤,我的推送成功了

推动变革

执行

Branch 'master' set up to track remote branch 'master' from 'origin'.
Run Code Online (Sandbox Code Playgroud)


Ron*_*lds 7

我经常遇到这个确切的消息,因为我创建了一个本地分支,git checkout -b <feature-branch-name>而没有先创建远程分支.

完成所有工作并在本地提交后,修复程序git push -u创建了远程分支,推送了所有工作,然后是合并请求URL.

  • 为了它的价值,我不得不运行`git push -u origin &lt;my-feature-branch-name&gt;`以创建远程分支并推送我的工作 (2认同)

ima*_*123 7

我正在尝试上述示例,但无法让它们与我在另一台计算机上创建的(非主)分支同步。作为背景,我在计算机 A (git v 1.8) 上创建了这个存储库,然后将存储库克隆到计算机 B (git 2.14) 上。我在 comp B 上进行了所有更改,但是当我尝试将更改拉到计算机 AI 上时无法这样做,出现上述相同的错误。与上述解决方案类似,我必须这样做:

git branch --set-upstream-to=origin/<my_repository_name> 
git pull
Run Code Online (Sandbox Code Playgroud)

略有不同,但希望对某人有所帮助


mah*_*mnj 6

尝试

   git pull --rebase
Run Code Online (Sandbox Code Playgroud)

希望这个答案有助于最初在这里回答/sf/answers/3851075931/


小智 6

尝试使用

git push --set-upstream origin <branch_name>
Run Code Online (Sandbox Code Playgroud)

否则

使用

git push -u 
Run Code Online (Sandbox Code Playgroud)

会告诉您需要做什么。