gpt4 book ai didi

git pull origin master 不更新 origin/master?

转载 作者:IT王子 更新时间:2023-10-29 00:55:01 29 4
gpt4 key购买 nike

根据文档,git pull 执行 git fetch 然后执行 git merge,但是在那种情况下执行 git pull origin master 应该执行 git fetch origin master 对吗?然而,它似乎并没有这样做。这是一个例子。

假设我的远程 origin master(在我的例子中是在 GitHub 上)有以下历史:

commit 1111111 : my first commit
commit 2222222 : a commit from someone else

而且我只在本地进行第一次提交,如下所示

git checkout master
git log --pretty=format:'%h' -n 1
1111111

git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111

从这里我开始 pull 并查看如下结果:

git checkout master
git pull origin master

git log --pretty=format:'%h' -n 1
2222222

git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111

可以看出, pull 实际上用来自远程源的新提交更新了我的 master 分支,但我的本地源/master 仍然在原处。强制我做以下事情

git fetch origin master

git checkout origin/master
git log --pretty=format:'%h' -n 1
2222222

这是 git pull 的正确行为,还是我配置有误?我查看了 git pull 手册页,没有看到任何提示,但我可能错过了。

最佳答案

有点奇怪,但是如果你使用git pull [remote] <refspec>它实际上不会更新远程引用。如果您以某种方式考虑它,这有点有意义:因为您指定了要获取的特定引用,所以它不必查找有关您的远程分支的任何信息,因此它本身并不知道它是哪个远程分支应该更新。它当然可以弄清楚,如果它最终得到修复我也不会感到惊讶,但这是现有的行为。 (邮件列表中可能有关于它的消息 - 我不知道。)

不过,您可以轻松解决它。如果你使用 git pull origin/master ,因为您正在指定通过远程分支获取的内容,所以它应该更新该远程分支。如果你无论如何都在你的主分支上(或任何其他分支跟踪源/主),你可以做 git pull并让它填充默认值,它会更新远程分支。

这记录在 git-pull 中手册页,最简洁地在 EXAMPLES 下,但也在其他地方。相关部分:

Merge into the current branch the remote branch next:

$ git pull origin next

This leaves a copy of next temporarily in FETCH_HEAD, but does not update any remote-tracking branches. Using remote-tracking branches, the same can be done by invoking fetch and merge:

$ git fetch origin
$ git merge origin/next

关于git pull origin master 不更新 origin/master?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689054/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com