1. git log
查看当前状态
可以看到我当前状态有四个提交,最初的提交 + 三次提交。现在想用git revert
回退这三次提交,但是我们知道git revert
是用一次新的提交回退之前的提交,所以我回退三次,就会有三个新的提交,但是我又想只增加一个新的提交,继续看。
2. git revert
回退依次三个提交
可以看到执行完三次回退后,又新增了三次提交,现在想将这三次提交合并成一个。
3. git rebase
合并多次commit
我们想将最近的三个提交合并,首先需要如下命令:
其中,-i 的参数是不需要合并的 commit 的 hash 值,这里即从当前时间往前推的第四个提交, 接着我们就进入到 vi 的编辑模式。
可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由 前方的命令名称、commit hash 和 commit message 组成。
当前我们只要知道两个命令: pick 和 squash
-
pick 的意思是要会执行这个 commit
-
squash 的意思是这个 commit 会被合并到前一个commit
我们将 9ee35f2 和 5eb5678 这两个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出
这时我们会看到 commit message 的编辑界面
其中, 非注释部分就是三次的 commit message, 我们要做的就是将这三个修改成一个新的 commit message。
输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这三个 commit 已经合并了。
然后 push 就好啦~