压缩推送提交组
Squash groups of pushed commits
The answer here 很好地解释了如何在推送后压缩最后几次提交,但是例如最后12人分成三组四人?也就是说,我已经推送了提交 1-12,现在想将它们压缩为三个提交。这三个压缩的提交将分别包含原始提交 1-6、7-8 和 9-12。我该怎么做?
奖励积分:如何为三个压缩的提交中的每一个指定新的提交消息?
使用
git rebase -i [commit-preceding-ones-you want-to-squash
标记您想要压缩的那些 s
(用于压缩)和您想要保留的那些 e
以供编辑。
然后它会交互式地压缩中间的,并在其他的处停止。然后使用 git commit -a --amend
编辑提交消息,并使用 git rebase --continue
继续。
man git rebase
应该有帮助。
您可以一次压缩多组提交:
git rebase -i HEAD~15
pick 3f3416d T11 - some issue
pick 23031eb T12 - fix
pick 8239b70 T13 - improvements
squash e1e23fd T13 - one more fix
squash 200c8c6 T13 - last fix
pick e5b0286 T14 - great feature
pick d18bf1b T15 - removing unused files
pick a1b1821 T16 - refactor part 1.
squash dd090dc T16 - refactor part 2.
squash d87db6b T16 - refactor part 3.
pick da1dd09 T17 - new model of database
pick 39b4ace T18 - restfull api
pick 65521eb T19 - registration form
squash 8924091 T19 - login form
pick b44a25c T20 - new super feature
在变基期间,系统会询问您有关每个组的新提交消息:
1组
# This is a combination of 3 commits.
# The first commit's message is:
T13 - improvements
# This is the 2nd commit message:
T13 - one more fix
# This is the 3rd commit message:
T13 - last fix
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Author: Your Name <your.email@domain.com>
# ...
2组
# This is a combination of 3 commits.
# The first commit's message is:
T16 - refactor part 1.
# This is the 2nd commit message:
T16 - refactor part 2.
# This is the 3rd commit message:
T16 - refactor part 3.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Author: Your Name <your.email@domain.com>
# ...
3组
# This is a combination of 2 commits.
# The first commit's message is:
T19 - registration form
# This is the 2nd commit message:
T19 - login form
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Author: Your Name <your.email@domain.com>
# ...
The answer here 很好地解释了如何在推送后压缩最后几次提交,但是例如最后12人分成三组四人?也就是说,我已经推送了提交 1-12,现在想将它们压缩为三个提交。这三个压缩的提交将分别包含原始提交 1-6、7-8 和 9-12。我该怎么做?
奖励积分:如何为三个压缩的提交中的每一个指定新的提交消息?
使用
git rebase -i [commit-preceding-ones-you want-to-squash
标记您想要压缩的那些 s
(用于压缩)和您想要保留的那些 e
以供编辑。
然后它会交互式地压缩中间的,并在其他的处停止。然后使用 git commit -a --amend
编辑提交消息,并使用 git rebase --continue
继续。
man git rebase
应该有帮助。
您可以一次压缩多组提交:
git rebase -i HEAD~15
pick 3f3416d T11 - some issue
pick 23031eb T12 - fix
pick 8239b70 T13 - improvements
squash e1e23fd T13 - one more fix
squash 200c8c6 T13 - last fix
pick e5b0286 T14 - great feature
pick d18bf1b T15 - removing unused files
pick a1b1821 T16 - refactor part 1.
squash dd090dc T16 - refactor part 2.
squash d87db6b T16 - refactor part 3.
pick da1dd09 T17 - new model of database
pick 39b4ace T18 - restfull api
pick 65521eb T19 - registration form
squash 8924091 T19 - login form
pick b44a25c T20 - new super feature
在变基期间,系统会询问您有关每个组的新提交消息:
1组
# This is a combination of 3 commits.
# The first commit's message is:
T13 - improvements
# This is the 2nd commit message:
T13 - one more fix
# This is the 3rd commit message:
T13 - last fix
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Author: Your Name <your.email@domain.com>
# ...
2组
# This is a combination of 3 commits.
# The first commit's message is:
T16 - refactor part 1.
# This is the 2nd commit message:
T16 - refactor part 2.
# This is the 3rd commit message:
T16 - refactor part 3.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Author: Your Name <your.email@domain.com>
# ...
3组
# This is a combination of 2 commits.
# The first commit's message is:
T19 - registration form
# This is the 2nd commit message:
T19 - login form
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Author: Your Name <your.email@domain.com>
# ...