如何在不进行任何更改的情况下恢复推送的合并?
Posted
技术标签:
【中文标题】如何在不进行任何更改的情况下恢复推送的合并?【英文标题】:How to revert pushed merge without any changes? 【发布时间】:2016-10-02 16:18:57 【问题描述】:我错误地将我的 git 存储库与它自己的一个遥控器合并。我试图按照this question 中的说明来扭转这一点,但我只得到了回复:
$ git revert -m 1 <commit id>
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:在做任何事情之前阅读整个答案,如果您觉得使用可能具有破坏性的命令不安全,最好备份 git repo(整个项目文件夹)。
如果您在错误合并后没有推送更改:
如果您键入git reflog
,您应该会在错误合并之前获得一个标记您的历史的修订。如果您不关心自该时间点以来您可能所做的任何更改(包括本地提交/未提交的文件),如果 XYZ 是您在查看 git reflog
时喜欢的参考,我将使用 git reset --hard XYZ
。
这将使您的历史看起来好像没有发生任何不好的事情,如果我没有在任何地方推送任何更改,我更愿意这样做(因为您真的不想与其他人 git history 搞混,以防他们退出您将“错误”更改推送到的遥控器)。
如果您在错误合并后推送了更改:
这里的官方文档中有很多提示:https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt(该页面链接自man git revert
)。
我建议您浏览大部分内容以找到一些一般推理并找到您想要尝试的案例。 git revert
保留您当前的历史记录并建立在它之上,与 git reset
相反,它让您回溯您的历史记录并“擦除”其中的一部分。如果你备份了你的 git 存储库,你应该可以在其中玩耍并学习一两件事:)
【讨论】:
所以我已经采取了恢复提交的步骤,注释说:这会恢复提交git reset --hard
方法。丑陋的历史可能没什么大不了的,您可以在这之间做出决定,并迫使用户将git fetch
-ed(或git pull
-ed)从您那里发送到git fetch
,然后将git reset --hard
发送到您的新推送历史,这是我到目前为止使用的选项。
所以我已经推送到origin/master了,你的第二个建议让用户git reset --hard
仍然适用吗?只有我自己和另一位用户...以上是关于如何在不进行任何更改的情况下恢复推送的合并?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交
Git - 如何在不快速转发和合并为当前的情况下恢复以前的提交