巧用 git rebase 合並多個 commit。


一、為什么需要合並多個 commit 呢?
 
有時候,我們開發一個功能。
修修補補 commit 了很多次,過多的 commit 會顯得很復雜。
不夠直觀,不能比較清晰查看那些 commit 是對應的那個功能。
所以,在這種情況下。我們需要整理一下 commit 的記錄,讓我們更好的管理提交記錄。
 
 
二、具體合並多個 commit 的流程。
 
1、development 分支有四次 commit ,然后我准備合並 "add a.php" 和 "add b.php" 的兩次 commit。
ps: 使用 git log 命令,查看 commit 記錄。
 
2、然后執行命令:
$ git rebase -i d2bf14b495fe57583371be8d0a48c927a2da7eb9 7fc6da429881c5bca2705f61aac0e3a1a3c0b1c7
ps: 命令說明
// -i 的含義是:--interactive, 即彈出交互式的界面讓用戶編輯完成合並操作 
// [startpoint] 指的是合並區間的起點。 
// [endpoint] 指的是合並區間的終點,默認是當前分支 HEAD 所指向的 commit。 

$ git rebase -i [startpoint] [endpoint] 

// 注意:這里的區間是一個前開后閉的區間。

 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!)。
 
 
4、修改合並之后的 commit 注釋。

 

5、編輯完合並 commit 的注釋之后,就保存退出(:wq!)。
 
6、但是,在我們的一頓猛操作之后,我們進入了一個臨時的分支(從 development 分支切出來的臨時分支)。
 
7、那這個問題怎么解決呢?現在我們來基於這個臨時分支,創建一個新的分支 feature/temp。
 
8、然后,我們再切回 development 分支,執行:git rebase feature/temp。
 
 
9、最后,看我們的 commit 記錄,就已經把 "add a.php" 和 "add b.php" 的 commit 合並了。
 

 

三、總結。
  • 這次合並多個 commit,主要用到的命令是:git rebase -i [startpoint] [endpoint]。
  • 合並完成之后,會進入一個臨時分支。需要在 development 分支上 rebase 這個臨時分支。
  • 我們可以通過 git log 命令,查看提交的記錄。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM