壁球将一个问题提交给一个人

时间:2018-10-23 10:51:21

标签: git merge rebase squash

如果在第一个问题之间还完成了另一个问题的提交,将一个问题的一堆提交合并为一个最简单的方法是什么?

我正尝试使用rebase

git checkout ISSUE-006
git rebase -i HEAD~13

哪个给我:

pick 5796b58 ISSUE-006: Fix case 1
pick 4d836b2 ISSUE-006: Fix case 2
pick cae225b ISSUE-006: Bump version
pick 0006f82 ISSUE-006: Fix case 3
pick 98263c2 ISSUE-006: Bump version
pick 8bcc4d4 ISSUE-018 Blahblahblah
pick 6b18711 ISSUE-018 minor changes
pick 0924c16 ISSUE-018 Blahblahblah
pick 0e720f9 ISSUE-006: Bump version
pick bc66908 ISSUE-006: Remove comments
pick 49930b9 ISSUE-006: Proper encoding
pick 8f1196e ISSUE-006: Add tests
pick 2bcbfef ISSUE-006: Bump version

我希望将属于ISSUE-006的每个提交压缩为一个提交。如果我理解正确,我可以简单地使用默认编辑器并将pick更改为squash

我还尝试将merge--squash一起使用,但未成功:

git checkout ISSUE-006
git branch -m ISSUE-TMP
git checkout master
git branch -b ISSUE-006
git merge --squash ISSUE-TMP
git branch -d ISSUE-TMP

我不确定它是否相关,但是之所以这样做,是因为我希望我的pull请求是干净的,并且只有一个提交。

1 个答案:

答案 0 :(得分:1)

  

如果我理解正确,我可以简单地使用默认编辑器并将pick更改为squash

不太正确,因为在ISSUE-018的提交之间有ISSUE-006的提交。提交被压缩到上一个提交,因此您还必须在编辑器中重新排列提交的顺序,将ISSUE-018的所有提交移到末尾或可能移到开头。

此外,对ISSUE-006的第一次提交应进行pick,而不是squash编辑。

例如:

pick 5796b58 ISSUE-006: Fix case 1
squash 4d836b2 ISSUE-006: Fix case 2
squash cae225b ISSUE-006: Bump version
squash 0006f82 ISSUE-006: Fix case 3
squash 98263c2 ISSUE-006: Bump version
squash 0e720f9 ISSUE-006: Bump version
squash bc66908 ISSUE-006: Remove comments
squash 49930b9 ISSUE-006: Proper encoding
squash 8f1196e ISSUE-006: Add tests
squash 2bcbfef ISSUE-006: Bump version
pick 8bcc4d4 ISSUE-018 Blahblahblah
pick 6b18711 ISSUE-018 minor changes
pick 0924c16 ISSUE-018 Blahblahblah

请注意,像这样简单地对提交进行重新排序会产生冲突,其中一些冲突可能很难解决。将来,如果您为每个问题创建一个新的分支机构,则也许可以省去您的头痛。

当然,合并或重新分支这些分支也会产生冲突。但是,如果您只是挤压分支的提交而不进行任何重新排序,那么您将不会获得任何回报。 git merge还包括一个--squash标志,以简化合并期间的工作流程。

将提交保存在单独的分支中的另一个好处是,它简化了合并/提取请求的提交。拉取请求和合并都在分支之间进行:您不能使用当前分支创建PR,该分支不包含两个问题的更改。

  

我之所以这样做是因为我希望我的请求请求是干净的,并且只有一个提交。

清洁度是主观的,在许多情况下,多个粒度提交比一个大型提交更清晰,更易于查看。更好的准则是遵循您正在参与的项目的准则,以使您的贡献与项目的其余部分保持一致。


编辑:在一条评论中,您提到了8bcc4d46b187110924c16ISSUE-018的提交)已经存在目标分支。在这种情况下,您可能希望将其从此分支中删除,例如通过在交互式基础库中执行以下操作:

pick 5796b58 ISSUE-006: Fix case 1
squash 4d836b2 ISSUE-006: Fix case 2
squash cae225b ISSUE-006: Bump version
squash 0006f82 ISSUE-006: Fix case 3
squash 98263c2 ISSUE-006: Bump version
squash 0e720f9 ISSUE-006: Bump version
squash bc66908 ISSUE-006: Remove comments
squash 49930b9 ISSUE-006: Proper encoding
squash 8f1196e ISSUE-006: Add tests
squash 2bcbfef ISSUE-006: Bump version