一、为什么需要合并多个 commit 呢?
 
有时候,我们开发一个功能。
修修补补 commit 了很多次,过多的 commit 会显得很复杂。
不够直观,不能比较清晰查看那些 commit 是对应的那个功能。
所以,在这种情况下。我们需要整理一下 commit 的记录,让我们更好的管理提交记录。
 
 
二、具体合并多个 commit 的流程。
 
1、development 分支有四次 commit ,然后我准备合并 "add a.php" 和 "add b.php" 的两次 commit。
ps: 使用 git log 命令,查看 commit 记录。
巧用 git rebase 合并多个 commit。
巧用 git rebase 合并多个 commit。
 
2、然后执行命令:
$ git rebase -i d2bf14b495fe57583371be8d0a48c927a2da7eb9 7fc6da429881c5bca2705f61aac0e3a1a3c0b1c7
巧用 git rebase 合并多个 commit。
ps: 命令说明
// -i 的含义是:--interactive, 即弹出交互式的界面让用户编辑完成合并操作 
// [startpoint] 指的是合并区间的起点。 
// [endpoint] 指的是合并区间的终点,默认是当前分支 HEAD 所指向的 commit。 

$ git rebase -i [startpoint] [endpoint] 

// 注意:这里的区间是一个前开后闭的区间。
巧用 git rebase 合并多个 commit。

 ps: Commands 说明,以下单字符命令为简写命令。

  • p, pick: 保留该 commit。
  • r, reword: 保留该 commit,可以修改 commit 的注释。
  • e, eidt: 保留该 commit,但停下来修改该 commit (不仅仅是注释),可以用来解决 merge 冲突。
  • s, squash: 将该 commit 和 前面一个 commit 合并。
  • f, fixup: 将该 commit 和 前面一个 commit 合并,但不保留该提交的注释信息。
  • x, exec: 执行 shell 命令。
  • d, drop: 丢弃该 commit。
 
3、然后,编辑 commit 内容。将 "pick" 改成 "squash" 或者 "s",意思是将该 commit (add b.php)和 前面的 commit (add a.php) 合并。编辑完成后,保存并退出(wq!)。
巧用 git rebase 合并多个 commit。
 巧用 git rebase 合并多个 commit。
 
4、修改合并之后的 commit 注释。
巧用 git rebase 合并多个 commit。

 

巧用 git rebase 合并多个 commit。
5、编辑完合并 commit 的注释之后,就保存退出(:wq!)。
巧用 git rebase 合并多个 commit。
巧用 git rebase 合并多个 commit。
 
6、但是,在我们的一顿猛操作之后,我们进入了一个临时的分支(从 development 分支切出来的临时分支)。
巧用 git rebase 合并多个 commit。
巧用 git rebase 合并多个 commit。
 
7、那这个问题怎么解决呢?现在我们来基于这个临时分支,创建一个新的分支 feature/temp。
巧用 git rebase 合并多个 commit。
巧用 git rebase 合并多个 commit。
 
8、然后,我们再切回 development 分支,执行:git rebase feature/temp。
巧用 git rebase 合并多个 commit。 
 
9、最后,看我们的 commit 记录,就已经把 "add a.php" 和 "add b.php" 的 commit 合并了。
巧用 git rebase 合并多个 commit。
 巧用 git rebase 合并多个 commit。

 

三、总结。
  • 这次合并多个 commit,主要用到的命令是:git rebase -i [startpoint] [endpoint]。
  • 合并完成之后,会进入一个临时分支。需要在 development 分支上 rebase 这个临时分支。
  • 我们可以通过 git log 命令,查看提交的记录。
 

相关文章: