git checkout标签,git pull在分支中失败


133

我已经克隆了一个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更新master分支,而保留我当前的分支(无论如何都是标签)。这样的事情可能吗?

我需要这个的原因是我有一个自动脚本,该脚本总是git拉存储库,并且由于上述错误而失败。


Answers:


114

编辑:对于--set-upstream master不推荐使用的较新版本的Git ,您应该--set-upstream-to改用:

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

根据提示,您可以运行:

git branch --set-upstream master origin/master

之后,您只需运行git pull即可更新代码。


5
这样就解决了问题。但是我仍然必须了解我的主分支是如何丢失对起源的引用的。我在树枝上,做了git checkout master。我无法做,git pull因为丢失了对原产地的引用。现在可以了。谢谢!
Ariel 2014年

'git branch --set-upstream-to = origin / master master my_branch'为我工作
蓝云

90

我遇到了同样的问题,并使用以下命令修复了该问题:

$ 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

9

使用切换回主分支

$ git checkout master

然后运行git pull操作

$ git pull origin/master

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


6
这正是我要避免的事情。我想知道是否存在“官方”方式。
alesko

5

@alesko:不可能仅git pull在结帐后才my_branch更新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 checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

例如

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

执行完此操作后git pull,它将从指定的分支中拉出。


3

您可以指定要拉的分支:

git pull origin master

或者,您可以进行设置,以便您的本地master分支将github master分支作为上游进行跟踪:

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

克隆存储库时(仅针对默认分支),会自动为您设置此分支跟踪,但是,如果将远程站点添加到现有存储库,则必须自己设置跟踪。值得庆幸的是,git给出的建议使人们很容易记住该怎么做。

--set-upstream显然在git 1.9.x中已弃用。展望未来,您想使用类似

git branch -u origin/master

假设您已经签出了master。如果没有, git branch -u origin/master master将工作


2

试试这个

git checkout master

git pull origin master

2
这并没有真正回答问题。同样,尽管没有公认的答案,但投票最高的答案更适合作为这个古老问题的答案
fejese 2014年

1

您需要为当前分支机构设置跟踪(上游)

git branch --set-upstream master origin/master

已被弃用,可以使用--track标志

git branch --track master origin/master

我也喜欢@casey注意的文档参考:

-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.

1

对我有用的是:git branch --set-upstream-to = origin master当我再次拉时,我仅从master获得更新,警告消失了。


1

如果像我一样需要始终执行此操作,则可以通过将以下内容添加到.gitconfig文件中来设置别名来自动执行此操作:

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

当您看到消息时There is no tracking information...,只需运行git set-upstream,然后git push再次运行即可。

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


0

为了只下载更新:

git fetch origin master

但是,这只会更新名为的引用origin/master。最好的更新本地语言的master方法是在另一条评论中提到的结帐/合并。如果你能保证你的地方master还没有从主干分出那origin/master是,你可以git update-ref你的当前映射master到新的点,但是这可能不是最好的解决方案,可以用定期...


0

不推荐使用此命令: git branch --set-upstream master origin/master

因此,在尝试设置跟踪时,这是对我有用的命令:

git branch --set-upstream-to=origin/master master
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.