也许我错过了一些关于遥控器的东西,但这让我很困惑: 我有一个带遥控器的git repo,遥控器实际上是我的USB记忆棒。 在我的遥控器上,有一个提交多于我当地的回购,所以
local-dir> git rev-list master -3
给了我
941eba8b82233f5daceb41a57e10ff2d6d893fb9
8b386974a1976142912c41cc7e270e69ad5ecbd5
dd09efc70c029ea79fcfc455068df3788d4e193a
和
远程-DIR> git rev-list master -4
给了我
28aaf69aafa9f21ad52c874d2e753bfd8e1b1f65
941eba8b82233f5daceb41a57e10ff2d6d893fb9
8b386974a1976142912c41cc7e270e69ad5ecbd5
dd09efc70c029ea79fcfc455068df3788d4e193a
到目前为止一切顺利。
我的遥控器名为stick
。当我做的时候
local-dir> git rev-list stick/master -4
我得到了
a0e2cf2a389647768384259e3e8f5a7b310740d4
243a8b06b3df1f232dafb9385eab8336dea23f25
c316830bb4c5a27d29e01bbd734ab46f3d90a24e
bfd1dc912ab3c9f9d9bc5b10303b580305f68ac4
进一步的调查显示“这种方式”我落后了10件事。
git fetch stick master
不会改变这种情况。
我原本预计remote-dir> git rev-list master -4
和local-dir> git rev-list stick/master -4
会产生相同的效果,至少在获取之后。好像我错过了什么。有人可以解释一下吗?
答案 0 :(得分:1)
命令:
git fetch stick master
在较旧的gits中的行为与最新的gits不同。
告诉git:
stick
设置为遥控器(找到USB记忆棒的路径)。master
的分支(它确实如此),则收集所有提交和其他所需对象。FETCH_HEAD
编写仅; 不更新refs/remotes/stick/master
中的“远程分支”信息。这是导致混淆的最后一步。
如果你改为运行:
git fetch stick
这将遵循前两个步骤,但对于步骤3和4,它将带来所有分支, 更新所有远程分支信息。然后git rev-list stick/master -4
将按照您预期的方式运行。
如果升级到git 1.8.4或更高版本,git fetch
将在步骤4中更新远程分支信息,即使使用双参数git fetch
表单,它也将按照您的方式运行预期
以下是1.8.4的发行说明对此的说法:
- “git fetch origin master”与“git fetch origin”或“git fetch”不同 没有更新“refs / remotes / origin / master”;这是一个早期的 设计决定保持远程跟踪分支的更新 可预测,但实际上,人们发现它更多 每当我们有一个时,便于机会性地更新它们 机会,当我们运行“git push”时,我们一直在更新它们 无论如何,已经打破了原来的“可预测性”。