如果在第一个问题之间也对另一个问题进行了提交,那么将一个问题的一堆提交合并为一个问题的最简单方法是什么?
我试图使用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
我不确定它是否相关,但我想这样做的原因是因为我希望我的拉取请求是干净的并且只有一个提交。
理解正确,我可以简单地使用默认编辑器并将
pick
更改为squash
?
不完全是,因为在提交之间有ISSUE-018
的提交ISSUE-006
.提交会被压缩到上一个提交,因此您还必须在编辑器中对提交进行重新排序,以便将ISSUE-018
的所有提交移动到末尾或可能移动到开头。
此外,ISSUE-006
的第一次提交应该是pick
ed,而不是squash
ed。
例如:
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。
我想这样做是因为我希望我的拉取请求是干净的并且只有一个提交。
清洁度是主观的,在许多情况下,多个粒度提交可能比一个大提交更清晰、更容易审查。更好的准则是遵循你正在参与的项目的准则,这样你的贡献与项目的其余部分保持一致。
编辑:在您提到的评论中,目标分支中已经存在提交8bcc4d4
,6b18711
和0924c16
(ISSUE-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