假设我有一个看起来像这样的Git存储库
* abcdefa (master) tip
* 1234567 (origin/master) base
如果其他人将origin/master
从1234567
转发到abcdefa
,则直到我git fetch
之前,我的本地存储库都不会更改。一旦我git fetch
,我的本地git就会像
* abcdefa (master, origin/master) tip
* 1234567 base
是否可以撤消此git fetch
?也就是说,我是否可以使git再次相信origin/master
仍位于1234567
而不是abcdefa
,而无需实际更改遥控器?显然,此状态并非完全不一致,因为这是我在运行git fetch
之前所处的状态,因此我认为有某种方法可以返回到该状态。
我意识到这听起来像是一个XY问题的大案例,因为我想要的东西是非常不合理的,但是(a)我认为我需要为公司内部的CR工具执行此操作,但我无法共享很多细节关于(b)在实际应用之外,我很好奇如何做到这一点,或者是否做不到。
答案 0 :(得分:2)
您可以使用git update-ref
(使用全名)来强制移动远程跟踪名称。如果启用了reflog(通常是这样),则可以撤消使用以下命令更新git fetch
的最后一个origin/master
:
git update-ref refs/remotes/origin/master origin/master@{1}
最好修复您使用的任何工具来接受提交哈希ID或解析为此类哈希ID的事物;然后就可以运行:
tool origin/master@{1}
或:
tool $(git rev-parse origin/master@{1})
直接。