git checkout tag,git pull在分支中失败

139

我克隆了一个 Git 代码库并切换到一个标签:

# git checkout 2.4.33 -b my_branch

这很好,但是当我尝试在我的分支上运行git pull时,Git会报错:

当前分支没有跟踪信息。请指定要与之合并的分支。有关详细信息,请参见git-pull(1)

git pull <remote> <branch>

如果你希望为这个分支设置跟踪信息,你可以使用以下命令:

git branch --set-upstream new origin/<branch>
我希望 git pull 只更新主分支,而不影响我当前的分支(它是一个标签)。是否有可能做到这一点?
我需要这么做的原因是我有一个自动脚本,它总是从 git 拉取存储库,但由于上述错误而失败。

可能是重复的问题:git pull:当前分支没有跟踪信息 - daisy
14个回答

118

编辑:对于较新版本的 Git,--set-upstream master 已被弃用,应改用 --set-upstream-to

git branch --set-upstream-to=origin/master master

按提示,你只需要运行:

git branch --set-upstream master origin/master

之后,您只需运行git pull以更新您的代码。


6
这解决了问题。但我仍需了解我的主分支如何失去对源的引用。我当时在一个分支上,执行了git checkout master。由于对源的引用丢失,我无法执行git pull。现在可以了,谢谢! - Ariel
'git branch --set-upstream-to=origin/master master my_branch' 对我有效。 - Blue Clouds
我正在尝试在一个分支上工作,我已经克隆了一个仓库,并检出了一个分支,那么为什么我要设置--set-upstream-to=origin/master呢?这会将我的更改推送到那里吗?为什么我不将其设置为我正在工作的BRANCH呢? - AgilePro

92
我遇到了同样的问题,并用以下命令解决了它:

$ git push -u origin master

根据帮助文件,-u基本上设置了拉取操作的默认设置:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).

48

尝试使用以下命令:

git pull origin master
git push -u origin master

11

使用以下命令切换回主分支:

git checkout master

$ git checkout master

然后运行 git pull 操作。

$ git pull origin/master

之后,您可以再次切换回您的 my_branch 分支。


6
我尽力避免这种情况。我想知道是否有一种“官方”的方法来做到这一点。 - alesko

5
@alesko : 在切换到my_branch分支后,仅使用git pull无法只更新master分支。
因为git pull会将更改合并到当前分支上,即在此情况下是my_branch

@Simon: 这将同时执行推送操作。为什么呢?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

根据文档:
-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.

4

首先,请确保您在正确的分支上。
然后(仅限一次):

git branch --track

之后这个问题就可以正常工作了:

git pull

4
您可以指定要拉取的分支:
git pull origin master

或者您可以这样设置,以便您的本地主分支将 GitHub 主分支作为上游进行跟踪:
git branch --set-upstream-to=origin/master master
git pull

当您克隆仓库(仅限默认分支)时,此分支跟踪会自动为您设置,但是如果您向现有仓库添加远程,则必须自行设置跟踪。幸运的是,git给出的建议使得如何进行跟踪变得非常容易记忆。

--set-upstream在git 1.9.x中已被弃用。 从现在开始,您需要使用类似于下面的命令:

git branch -u origin/master

假设您已经检查过主分支。如果没有,git branch -u origin/master master 将起作用。

4
你可能有多个分支。而你当前的分支没有在远程设置它的上游。
解决步骤:
git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

e.g.

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

完成这个操作后,当你执行 git pull 命令时,它会从指定的分支拉取代码。

3
如果你和我一样需要经常执行这个操作,那么你可以通过在.gitconfig文件中添加以下内容来设置一个别名自动完成它:
[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

当你看到消息“没有跟踪信息...”时,只需运行git set-upstream,然后再次运行git push。感谢https://zarino.co.uk/post/git-set-upstream/

我使用以下命令将其全局添加:git config --global alias.set-upstream '!git branch --set-upstream-to=origin/\git symbolic-ref --short HEAD`'` - Addison

2

试试这个

git checkout master

git pull origin master

2
这并不是真正回答问题。虽然没有被接受的答案,但得票最高的那个更适合作为这个老问题的答案。 - fejese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接