如何在上次提交之前进行提交

时间:2015-03-05 16:04:57

标签: git

假设我有2个分支masterdev

dev分支在master之前提交2次提交,并且这些提交都不会合并或推送到任何remote

dev分支如下所示:

dev A - B - C - D - E

然而,A是最老的,而且是最新的提交。

我想要达到这种状态:

dev A - B - C - E

基本上我想在最后一次提交之前核对提交,就好像它从未发生过一样。也不应该有冲突(E不依赖于D&#39的变化)。

我可以使用交互式rebase吗?

1 个答案:

答案 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~