假设我有2个分支master
和dev
。
dev
分支在master
之前提交2次提交,并且这些提交都不会合并或推送到任何remote
。
dev
分支如下所示:
dev A - B - C - D - E
然而,A是最老的,而且是最新的提交。
我想要达到这种状态:
dev A - B - C - E
基本上我想在最后一次提交之前核对提交,就好像它从未发生过一样。也不应该有冲突(E不依赖于D&#39的变化)。
我可以使用交互式rebase吗?
答案 0 :(得分:3)
我会使用非常有用的形式的rebase。在dev
上(你需要干净的工作副本):
git rebase -i HEAD~~
在您喜欢的文本编辑器中,您将获得最近2次提交的列表。只需注释/删除不需要的提交行。
如果HEAD
取决于HEAD~
引入的更改,则可能会出现合并冲突,解决后,您将丢失以前的历史记录(当然仍可通过reflog
获取) )。我通常更喜欢这种方法。
如果您想保存以前的历史记录(以及不需要的提交),您应该
git checkout HEAD~~ # go to last good commit
git checkout -b new_branch # create a new branch and forget about the original
git cherry_pick dev # copy the commit on top of `dev` to `new_branch`
您仍会遇到冲突,但您不会修改dev
的历史记录。
另一方面,如果不需要的提交在master
并且您不想破坏任何人的构建,那么您将执行git revert HEAD~