ChatGPT解决这个技术问题 Extra ChatGPT

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

我克隆了一个 git 存储库,然后签出了一个标签:

# git checkout 2.4.33 -b my_branch

这没关系,但是当我尝试在我的分支中运行 git pull 时,git 会吐出这个错误:

当前分支没有跟踪信息。请指定要合并的分支。详见 git-pull(1) git pull 如果你想为这个分支设置跟踪信息,你可以这样做: git branch --set-upstream new origin/

我希望 git pull 只更新 master 分支并单独保留我当前的分支(无论如何它是一个标签)。这样的事情可能吗?

我需要这个的原因是我有一个自动脚本,它总是 git 拉存储库,当然由于上面的错误而失败..


s
sashoalm

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

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

按照提示,您可以运行:

git branch --set-upstream master origin/master

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


这解决了问题。但我仍然需要了解我的主分支是如何失去对原点的引用的。我在树枝上做了git checkout master。我无法执行 git pull,因为对 origin 的引用丢失了。现在它起作用了。谢谢!
'git branch --set-upstream-to=origin/master master my_branch' 为我工作
我正在尝试在一个分支上工作,我已经克隆了一个 repo,并签出了一个分支,所以我为什么要设置 --set-upstream-to=origin/master。这会将我的更改推到那里吗?为什么我不将它设置为我正在处理的分支?
a
akjoshi

我有同样的问题并用这个命令修复它:

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

R
ROMANIA_engineer

试试这些命令:

git pull origin master
git push -u origin master

c
cfedermann

使用切换回主分支

$ git checkout master

然后运行 git pull 操作

$ git pull origin/master

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


这正是我想要避免的。我想知道是否有“官方”的方式来做到这一点。
C
Community

@alesko :不可能只在结帐后只做 git pull my_branch 来更新 master 分支。
因为 git pull 也会合并到 current 分支 - >在您的场景中到 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.

d
drzymala

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

git branch --track

之后,这再次起作用:

git pull

E
Eric

您可能有多个分支。而且您当前的分支没有将其上游设置为远程。

解决此问题的步骤:

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 时,它会从指定的分支中拉取。


A
Akash Kandpal

您可以指定要提取的分支:

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

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


r
rjmunro

如果您像我一样需要一直这样做,您可以通过将以下内容添加到您的 .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/


我用它来全局添加它:git config --global alias.set-upstream '!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`'
v
vanarajcs

尝试这个

git checkout master

git pull origin master

这并没有真正回答这个问题。此外,虽然没有公认的答案,但投票最多的答案更适合作为这个老问题的答案
J
Jorman Bustos

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

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.

J
Jason D

对我有用的是: git branch --set-upstream-to=origin master 当我再次拉动时,我只得到了来自 master 的更新并且警告消失了。


t
twalberg

为了只下载更新:

git fetch origin master

但是,这只是更新了一个名为 origin/master 的引用。更新本地 master 的最佳方式是在另一条评论中提到的结帐/合并。 如果您可以保证您的本地 master 没有偏离 origin/master 所在的主干线,您可以使用 git update-ref 映射您当前的 master } 到新的点,但这可能不是定期使用的最佳解决方案......


A
Aaron Lelevier

此命令已弃用:git branch --set-upstream master origin/master

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

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