git pull origin master不更新origin/master?

v1uwarro  于 2023-03-28  发布在  Git
关注(0)|答案(5)|浏览(353)

根据文档,git pull执行git fetch,然后执行git merge,但是执行git pull origin master应该执行git fetch 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

从这里我做我的拉,看看结果如下:

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手册页,没有看到任何建议,但我可能错过了它。

knpiaxh1

knpiaxh11#

这有点奇怪,但如果你使用git pull [remote] <refspec>,它实际上不会更新远程引用。如果你以某种方式思考,这是有道理的:因为你指定了一个特定的引用来获取,所以它不需要查找任何关于你的远程分支的信息,所以它本质上不知道它应该更新哪个远程分支。它当然可以弄清楚,如果它最终被修复了,我也不会感到惊讶,但这是现有的行为。(邮件列表上可能有关于它的消息-我不知道。)
不过,你可以很容易地解决这个问题。如果你使用git pull origin/master,因为你指定了通过远程分支获取的内容,它应该会更新远程分支。如果你在master分支上(或者任何其他跟踪origin/master的分支),你可以只执行git pull,让它填充默认值,它会更新远程分支。
这在git-pull手册页中有详细说明,在EXAMPLES(示例)下有最简洁的说明,其他地方也有。相关部分:
将远程分支合并到当前分支中:

$ git pull origin next

这会在FETCH_HEAD中暂时保留一个next的副本,但不会更新任何远程跟踪分支。使用远程跟踪分支,同样可以通过调用fetch和merge来完成:

$ git fetch origin
$ git merge origin/next
eblbsuwk

eblbsuwk2#

似乎你已经fork了仓库,你的fork分支没有更新最新的代码

osh3o9ms

osh3o9ms3#

我也遇到过这个问题--我在一个分支上运行了“git pull”,然后检查了日志,它没有被更新。困惑的是,我实际上读了git pull的输出,它特别提到你需要告诉git在哪里合并,这是通过一个命令“git pull [remote] [local branch]”来完成的,对我来说是“git pull origin newfeature 1”。
出现问题的第一个命令尝试:

Z:\Abusers\jd\repo1> git pull
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 16 (delta 7), reused 15 (delta 7), pack-reused 1
Unpacking objects: 100% (16/16), done.
From github.abc.com:group1/repo1
   06aefba..e5ed6ee  develop    -> origin/develop
   af689cb..b8667a6  newfeature1-> origin/newfeature1
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=origin/<branch> newfeature1

工作指令:

Z:\Abusers\jd\repo1> git pull origin newfeature1
From github.abc.com:group1/repo1
* branch            newfeature1-> FETCH_HEAD
Updating af689cb..b8667a6
Fast-forward
.../file1.py                |   2 +-
abc/yes1/cool1.a        | Bin 0 -> 106329 bytes
.../abc.py                    |   7 ++++---
3 files changed, 5 insertions(+), 4 deletions(-)
create mode 100644 abc/yes1/cool1.a
jw5wzhpr

jw5wzhpr4#

如果你从origin以外的任何地方运行pull,例如

git pull <url> ...

即使url实际上与origin的repo/url相同,git也不会更新originremote 的任何远程跟踪分支-本质上是一个默认的repo“容器”,它没有链接到这次git调用的工作树。
要解决这个问题,您应该添加远程<->本地(origin)Map(refspec),默认情况下为+refs/heads/*:refs/remotes/origin/*

git pull <anything> +refs/heads/*:refs/remotes/origin/*
q5lcpyga

q5lcpyga5#

我尝试了每一个可能的解决方案,我可以从stackoverflow,但没有任何工作,我直到我刚刚尝试了这个,它的工作就像一个魅力。

git pull <repository's clone http url>

相关问题