git 常用命令詳解(merge/rebase/cherry-pick)

merge

git merge 將已提交的commit(自歷史記錄與當前分支分開以來的提交)合併到當前分支中。

原始分支

	  A---B---C topic
	 /
    D---E---F---G master

checkoutmaster分支,使用命令git merge topic

	  A---B---C topic
	 /         \
    D---E---F---G---H master

git merge --abort將中止合併過程,並嘗試重建合併前的狀態。但是,如果在合併開始時有未提交的更改(尤其是在合併開始後進一步修改了這些更改),則git merge --abort在某些情況下將無法重建原始更改。因此警告:不建議運行git merge合併重要的未提交更改

rebase

git rebase的使用場景

  1. 合併多次commit爲單次commit
  2. 分支合併

變基的原理

  1. 找到這兩個分支(即當前分支 topic、變基操作的目標基底分支 master)的最近共同祖先 D
  2. 對比當前分支相對於該祖先的歷次提交,提取相應的修改並存爲臨時文件(A+B+C=C’)
  3. 然後將當前分支指向目標基底 C’, 最後以此將之前另存爲臨時文件的修改依序應用。

原始分支

	  A---B---C topic
	 /
    D---E---F---G master

topic分支使用git rebase master

	  C' topic
	 /
    D---E---F---G maste

checkoutmaster分支,使用命令git merge topic

    D---E---F---G---C' master

注意:rebase 會改寫歷史記錄,若該分支的提交已被其他使用者修改時,不建議使用

可選操作

  • p, pick 保留該commit
  • r, reword 保留該commit,但修改註釋
  • e, edit 保留該commit,但修改提交
  • s, squash 保留該commit,將其前一個commit合併
  • f, fixup 操作與squash相同,但丟棄註釋
  • x, exec 執行shell命令
  • d, drop 丟棄該commit

cherry-pick

git-cherry-pick 能應用(合併)已經存在的commit,即選擇合併某個特定commit

原始分支

	  A---B---C topic
	 /
    D---E---F---G master

假設commit C的版本號爲7289a5,在master分支使用git cherry-pick 7289a5

	  A---B---C topic
	 /
    D---E---F---G---C master

參考資料:

  1. git merge
  2. git book
  3. Git Community Book 中文版
  4. 徹底搞懂 Git-Rebase
  5. Git合併特定commits 到另一個分支
發佈了109 篇原創文章 · 獲贊 97 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章