git rebase -i
允许用户通过squash
或fixup
将提交与前一个提交合并。这两个选项都要求至少有一个提交为pick
- ed。当一个人想要使用第一次提交但丢弃其提交消息时,该怎么办?换句话说,如果我希望第一次提交与后续提交合并,我该怎么办?
答案 0 :(得分:1)
你只需要--root
标志(自Git 1.7.12以来可用,即除了某些未命名的未更新的 cough * Centos * cough Linux发行版之外的所有人)。
考虑压缩 A 和 B 的结果是(提交不是完全遵守这个简单的代数,但它适合我们的情况)只需 A + B 。因此,由于 B + A = A + B ,无论是将#1提交到提交#2还是将#2提交到提交#1都无关紧要。当然,这不计算压缩在一起的提交的消息,所以让我们仔细看看。
假设您已经运行git rebase -i --root
以便能够重新定义包括根提交在内的所有内容。你现在有:
pick cb57fdd initial commit
pick 478acbd second commit
将第二个更改为squash
并编写文件并退出编辑器。 Git将两个提交压缩在一起并再次调出你的编辑器,你会看到:
# This is a combination of 2 commits.
# This is the 1st commit message:
initial commit
# This is the commit message #2:
second commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Sat Nov 19 14:44:07 2016 -0800
#
# interactive rebase in progress; onto 45bc10c
# Last commands done (2 commands done):
# pick cb57fdd initial commit
# squash 478acbd second commit
(具体细节取决于您的Git版本,当然还有提交内容)。
由于您处于自己喜欢的编辑器中,因此很容易构建您想要的任何新提交消息。例如,您可以删除整个第一个提交的消息,如果这是您想要的。这样做,编写文件,退出编辑器,你就完成了。
答案 1 :(得分:0)
branch-1
)$ git branch
$ git log
$ git checkout first-commit
$ git commit --amend -am 'new-commit-msg' --allow-empty
$ git log
git checkout branch-1
first-commit
替换为new-commit
$ git replace first-commit new-commit
$ git filter-branch -- --all
git push -f origin HEAD