恢复已提交的 git 合并同时保留稍后合并同一分支的选项的最佳方法是什么?
这是针对一种情况,当我将分支合并到 HEAD 中,然后决定我目前不希望这些更改,但仍希望在以后的某个时间点将它们合并到 HEAD 中。
">git revert -m 1"将代码恢复到合并前的状态,但分支仍然以某种方式标记为"已合并"。因此,稍后与同一分支重复合并是行不通的。
这应该是一个非常普遍的问题(git 是一个进化的工具(,但我找不到一个简单的干净解决方案(除了破坏 git 存储库并再次从远程拉取它(。我错过了什么吗?
很抱歉,您浪费了分支。
但是有一个解决方法。诀窍是暂时"重写"合并提交,以便它忘记分支是父分支。假设X
是合并提交:
git replace --graft X X^ # pretend that there is just one parent
git merge branch # merge the branch again
git replace --delete X # remove the replacement
如果你的合并提交还没有被推送,它是顶部的,你可以使用 reset 命令
git reset --hard HEAD^
请注意,所有未提交的更改都将丢失。
如果您尚未发布合并提交(推送到中央服务器(,最好的解决方案是重写历史记录以删除合并提交。
- 如果在合并提交后没有其他提交,请将 head 重置为上一次提交:
git 重置头^
- 如果在合并提交
- 后还有其他提交,则需要执行变基并删除合并提交,同时重新应用其他提交。
git 变基 -i
如果您已经发布了合并,则需要决定是重写历史记录以保留分支的适当合并潜力,还是简单地添加还原提交。这将需要与可能下载合并的每个人交谈。
如果无法重写历史记录,则需要还原:
git 还原 -m 1
在这种情况下,分支的未来合并将需要手动干预。您可能需要挑选未被合并选取的提交,或还原还原提交。