这在很大程度上是出于好奇心,因为我想要熟悉Git。我已经看过“git fetch”的文档,但我没有看到一个明显的解释如下。提前感谢,如果这是显而易见的,请道歉。
1)从一个中央存储库,例如GitHub,我在两台机器HostA
和HostB
中的每台机器上克隆了一个名为website
的存储库。
2)在HostA
上,我更改了一个文件,比如README.txt
,然后提交它。
在HostA
上,分支master
和origin/master
的提交与预期的不同,因为我还没有推送
git show master
git show origin/master
报告不同的散列(因为master
有更改,而origin/master
没有更改)
3)一旦我推了,他们也是一样的。
4)现在,在HostB
上,如果我执行以下操作:
git fetch
git merge FETCH_HEAD
之后,在使用git show
查询时,HostB上的master
和origin/master
会报告相同的哈希值
但
如果我这样做了,在HostB
上
git fetch origin master
git merge FETCH_HEAD
在这一点上,散列仍然不同。
git show origin
git show origin/master
报告不同的哈希值
直到我执行一个普通的git fetch
,跟踪分支origin/master
才会更新
为什么会这样呢?
发布于 2013-06-13 04:14:32
如果你想快进,合并你自己,或者使用git pull。您似乎不理解git fetch的目的不是更新您的工作树。Fetch用于更新您的跟踪分支。
发布于 2012-08-10 08:11:55
答案就在你从git fetch
得到的消息中。在第一种情况下,当您在未提供refspec的情况下获取时,您将看到远程跟踪分支已更新:
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /depot
c67d1c8..1941673 master -> origin/master
请注意,该消息如何显示源/主文件是使用源文件中的主文件更新的。
现在,在第二种情况下,您指定refspec,您将得到完全不同的结果:
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /depot
* branch master -> FETCH_HEAD
因此,当您指定refspec时,远程跟踪分支(源/主)不会更新,只会更新FETCH_HEAD。
最终的结果是,当你不是真正的时候,你会看起来领先于origin/master。我不能想象为什么这种行为是可取的,但这绝对是fetch命令的一个有趣的小怪癖。
https://stackoverflow.com/questions/11892517
复制相似问题