如果在第一个问题之间还完成了另一个问题的提交,将一个问题的一堆提交合并为一个最简单的方法是什么?
我正尝试使用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请求是干净的,并且只有一个提交。
答案 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,该分支不包含两个问题的更改。
我之所以这样做是因为我希望我的请求请求是干净的,并且只有一个提交。
清洁度是主观的,在许多情况下,多个粒度提交比一个大型提交更清晰,更易于查看。更好的准则是遵循您正在参与的项目的准则,以使您的贡献与项目的其余部分保持一致。
编辑:在一条评论中,您提到了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