重置远程分支的本地视图

时间:2020-03-12 17:45:39

标签: git

假设我有一个看起来像这样的Git存储库

* abcdefa (master) tip
* 1234567 (origin/master) base

如果其他人将origin/master1234567转发到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)在实际应用之外,我很好奇如何做到这一点,或者是否做不到。

1 个答案:

答案 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})

直接。