📜  我如何压缩最后 X 次提交 (1)

📅  最后修改于: 2023-12-03 15:25:42.915000             🧑  作者: Mango

如何压缩最后 X 次提交

背景

在软件开发过程中,我们经常需要提交代码到代码仓库中。有些情况下,我们可能需要将最后 X 次提交进行压缩,使代码历史更加干净清晰,同时也能够减少代码仓库的大小。

方案

我们可以使用 git rebase 命令来合并最近的 X 次提交。下面是具体的操作步骤:

  1. 首先,我们需要确认当前所在的分支。可以使用 git branch 命令来查看当前分支:

    $ git branch
    * master
    
  2. 然后,我们需要使用 git rebase 命令来开始压缩最近的 X 次提交。可以使用以下命令来压缩最后 3 次提交:

    $ git rebase -i HEAD~3
    

    -i 选项表示交互式模式,可以打开一个编辑器来编辑提交历史。HEAD~3 表示选取最后 3 次提交。

  3. 打开编辑器后,你应该会看到如下内容:

    pick abcd123 Commit message 1
    pick efgh456 Commit message 2
    pick ijkl789 Commit message 3
    
    # Rebase abcdefg..ijkl789 onto abcdefg
    #
    # Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #  x, exec = run command (the rest of the line) using shell
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    # However, if you remove everything, the rebase will be aborted.
    #
    # Note that empty commits are commented out
    

    每一个提交都代表一个代码变更历史,每一行代表一个操作,这里默认都是 pick 操作。我们可以将后面两次提交的 pick 改成 squashfixup,然后保存并退出编辑器。

    • squash:将该次提交的变更合并到前一次提交,并将两次提交的注释合并成一个注释。
    • fixup:效果同 squash,唯一的区别是将该次提交的注释删除。如果两次提交都有注释,可以使用 squash
    pick abcd123 Commit message 1
    squash efgh456 Commit message 2
    squash ijkl789 Commit message 3
    
  4. 再次保存并退出编辑器后,Git 就会自动帮我们完成最后的提交压缩。

    $ git log --oneline
    bcda555 Squashed commit of the following:
    ea83c2f Commit message 1
    

    注意,每一行只显示一条记录,这说明我们已经成功地压缩了最后 3 次提交。

总结

通过使用 git rebase 命令,我们可以轻松地压缩最近的 X 次提交,使代码历史更加干净清晰。这对于项目的管理和维护都有很大的帮助。