如何将提交与git interactive rebase中的下一个提交合并?

时间:2016-11-20 02:17:58

标签: git rebase

git rebase -i允许用户通过squashfixup将提交与前一个提交合并。这两个选项都要求至少有一个提交为pick - ed。当一个人想要使用第一次提交但丢弃其提交消息时,该怎么办?换句话说,如果我希望第一次提交与后续提交合并,我该怎么办?

2 个答案:

答案 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
  • 请参阅first-commit-hash并将其保存(例如,first-commit) $ git log
  • 签出首次提交
    $ git checkout first-commit
  • 更改提交消息
    $ git commit --amend -am 'new-commit-msg' --allow-empty
  • 现在保存新的提交哈希(例如,new-commmit)
    $ git log
  • 回到'branch-1'分支 git checkout branch-1
  • first-commit替换为new-commit
    $ git replace first-commit new-commit
  • 根据替换件重写所有期货提交 $ git filter-branch -- --all
  • 强行推动你的改变 git push -f origin HEAD