我在分行“特色”工作 所以我的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次提交? 注意:分支功能是本地的,如果重要,则不会被推送。
答案 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将自行完成。