Undoing git merge --squash



git merge --squash 是我为了将另一个功能分支合并到我的主分支中所做的,只是为了后来意识到我已经丢失了一些重要的历史,这是功能分支的一部分。

如果在合并提交之上有大量提交到主分支,如何将历史记录从功能分支返回到主分支?

如果我再次将功能分支合并到我的主分支中,它会解决问题吗?

如果你在功能分支中合并,这可能看起来有点愚蠢,因为你在挤压合并和功能分支中有类似的变化,但历史记录会在那里。

如果您在功能分支中编辑的相同位置更改了某些内容,则很可能必须解决一些合并冲突。

如果您确实知道主分支中遗漏了哪些提交,只需cherry-pick它们,要么一个接一个(每个提交git cherry-pick <COMMIT-SHA>(,要么使用 rebase --interactive .

签出功能分支后,执行git rebase --interactive master(假设master是您的主分支(。您的$EDITOR将弹出,其中包含功能分支中不在主分支中的提交列表,每个提交都以一个pick常量开头,并且是短 SHA 哈希。删除您知道已经压缩到master中的提交行并保存该文件将使git批量挑选它们。当然,如果出现冲突,您必须解决冲突,但是发生大冲突(例如,80% 的提交有冲突(可能是一个警告,表明您正在应用之前合并的提交。

最新更新