长话短说:如何撤消在我上次提交之前完成的合并?
- 我合并
- 我COMMITED新的变化。
我想撤销合并但保留新的更改。我知道git reset --hard <hash>
将撤消提交,如果我做了2次,我会撤消合并。但那么新的变化呢?提前致谢。
长话短说:如何撤消在我上次提交之前完成的合并?
我想撤销合并但保留新的更改。我知道git reset --hard <hash>
将撤消提交,如果我做了2次,我会撤消合并。但那么新的变化呢?提前致谢。
您可以使用rebase
为:
git rebase -i HEAD~3
你再有类似
pick #hash3 Your commit 1 title
pick #hash2 Your commit 1 title
pick #hash1 Your commit 1 title
如果你想删除例如2款#hash1
和#hash2
,只需做:
pick #hash3 Your commit 1 title
drop #hash2 Your commit 1 title
drop #hash1 Your commit 1 title
保存。
警告:
如果衍合的提交#hash3
之前(这是最古老的在这里),如果你已经推,你必须push
带强制标志:git push -f
。如果其他人在同一个远程分支上工作,这可能非常危险。如果你独自一人在回购或至少在树枝上,继续前进;)
您可以使用git revert <<sha hash of merge commit>> -m 1
中的1表示要保持合并的主线(或父母)提交对象。作为恢复的结果,父级2引入的任何文件更改都将被删除。主线分支上的其他提交所做的任何更改都不会受到影响。
git cat-file -p <<sha hash of merge commit>>
这将显示您的父母。如果在git revert命令中使用1选项,将使用输出中列出的第一个父项。
采用这种方法不会删除/重写您的历史记录,就像使用rebase方法一样。
如果您已经分享了您的代码,您应该采取这种方法。否则,您将面临其他开发人员在未来的提交中重新引入不需要的代码的风险。
在共享代码上重新激活还会为其他开发人员引入重复的提交对象。这是非常皱眉。
要恢复的注意事项是,如果您希望稍后介绍原始合并中的更改,则需要恢复恢复。
来自合并分支的所有提交都出现在rebase中。我不得不用这种方法一个接一个地“放下”他们。 –
啊所以你有很多来自合并的提交?那么你可能想看看git reflog,你可能会在合并之前回来,但我不能在这里引导你 – Maxime