如何在分支中将2个提交合并为1个git中的1个?

时间:2015-06-20 15:50:45

标签: git version-control git-branch git-rebase

我在分行“特色”工作 所以我的git树是:

                  master
A<--B<--C<--D<--F<--G
            |<--E
                Feature  

我想在使用Feature分支时获得所有最新的master,所以我做了:

git checkout Feature  
git rebase master  

在rebase期间,我在一个文件中遇到合并冲突,在手动解决冲突期间,我犯了一个错误,我后来意识到这一点,而不是在运行git rebase --continue之前 所以我最终得到了一棵树,如下:

                 master      
A<--B<--C<--D<--F<--G<--E  
                       Feature

然后我意识到我的错误实际上打破了E的构建 我纠正了我的错误(还没有提交)并继续我的工作,但我不希望在功能中有2个提交最终会在master中提交,而其中一个提交是一个糟糕的提交。
另外,我想在功能的主要分支中结束一次提交 如果我有:

                 master      
A<--B<--C<--D<--F<--G<--E<--H  
                           Feature   

如何将E和H组合成一个提交,以便在我执行时:

git checkout master  
git rebase feature   

我的主人只有1次提交? 注意:分支功能是本地的,如果重要,则不会被推送。

1 个答案:

答案 0 :(得分:3)

您可以使用交互式rebase来组合两个提交。您需要在第二个选项上使用squash选项。

开始于:

git rebase -i HEAD~2
在编辑器中,您将看到以下顺序排列的两行:

pick E's SHA-1
pick H's SHA-1

替换为

pick E's SHA-1
squash H's SHA-1

然后关闭编辑器。 Git会选择E,然后将H与它结合起来。

系统将提示您输入新的合并提交消息。完成后关闭该编辑器,并且rebase将自行完成。