概要

了解 git revisions 的命令

合并多个 commit 的几种方法

动机:创建一个临时的 branch, 这个 branch 包含了若干个 commit 的合并 commit, 在图形化 git 前端中,可以方便地查看这个合并 commit 都包含了哪些变更;

方法一:git cherry-pick --no-commit

不足之处:遇到了 merge commit 会比较麻烦,比如说一个 merge commit c3 它的 parent commits 有 c1 和 c2, 那么你需要向 git-cherry-pick 指定 -m 参数(也就是 --mainline 参数)来表明要 replay c3 对于哪个 parent commit 的变更;

方法二:git reset --soft

假设当前的 HEAD 指向 r0, 假设我们执行 git reset --sort rx , 它能够将 head 移动到一个指定的 revision rx, 但是 tree 和 index 仍然是旧 HEAD 也就是 r0 的版本,这时再执行 git commit 操作就能够创建一个合并了 r0..rx 集合中的所有 commits 的 commit.

方法三:git rebase -i

例如 git rebase -i HEAD~2 , 在弹出的编辑器中将最后一个 commit 标记为 s, 就可以将这个 commit squash 到上一个 commit.