點選「 IT碼徒 」, 關註,置頂 公眾號
每日技術幹貨,第一時間送達!
1)git rebase 讓你的送出記錄更加清晰可讀
git rebase
的使用
rebase 轉譯為變基,他的作用和 merge 很相似,用於把一個分支的修改合並到當前分支上。
如下圖所示,下圖介紹了經過 rebase 前後送出歷史的變化情況。
現在我們來用一個例子來解釋一下上面的過程。
假設我們現在有2條分支,一個為 master ,一個為 feature/1,他們都基於初始的一個送出
add readme
進行檢出分支,之後,master分支增加了
3.js
和
4.js
的檔,分別進行了2次送出,feature/1也增加了
1.js
和
2.js
的檔,分別對應以下2條送出記錄。
master 分支如下圖:
feature/1分支如下圖:
結合起來看是這樣的
此時,切換到 feature/1 分支下,執行
git rebase master
,成功之後,透過 log 檢視記錄。
如下圖所示:可以看到先是逐個套用了 mater 分支的更改,然後以 master 分支最後的送出作為基點,再逐個套用 feature/1的每個更改。
所以,我們的送出記錄就會非常清晰,沒有分叉,上面演示的是比較順利的情況,但是大部份情況下,rebase 的過程中會產生沖突的,此時,就需要手動解決沖突,然後使用
git add
、
git rebase --continue
的方式來處理沖突,完成 rebase,如果不想要某次 rebase 的結果,那麽需要使用
git rebase --skip
來跳過這次 rebase。
2)git merge 和 git rebase 的區別
不同於
git rebase
的是,
git merge
在不是
fast-forward
(快速合並)的情況下,會產生一條額外的合並記錄,類似
Merge branch 'xxx' into 'xxx'
的一條送出資訊。
另外,在解決沖突的時候,用 merge 只需要解決一次沖突即可,簡單粗暴,而用 rebase 的時候 ,需要一次又一次的解決沖突。
3)git rebase 互動模式
在開發中,常會遇到在一個分支上產生了很多的無效的送出,這種情況下使用 rebase 的互動式模式可以把已經發生的多次送出壓縮成一次送出,得到了一個幹凈的送出歷史,例如某個分支的送出歷史情況如下:
進入互動式模式的方式是執行:
git rebase -i <base-commit>
參數base-commit就是指明操作的基點送出物件,基於這個基點進行 rebase 的操作,對於上述送出歷史的例子,我們要把最後的一個送出物件(ac18084)之前的送出壓縮成一次送出,我們需要執行的命令格式是:
git rebase -i ac18084
此時會進入一個 vim 的互動式頁面,編輯器列出的資訊像下列這樣。
想要合並這一堆更改,我們要使用 squash 策略進行合並,即把當前的 commit 和它的上一個 commit 內容進行合並, 大概可以表示為下面這樣。
pick ... ...
s ... ...
s ... ...
s ... ...
修改檔後 按下
:
然後
wq
保存結束,此時又會彈出一個編輯頁面,這個頁面是用來編輯送出的資訊,修改為feat: 更正,最後保存一下,接著使用
git branch
檢視送出的 commit 資訊,rebase 後的送出記錄如下圖所示,是不是清爽了很多?rebase 操作可以讓我們的送出歷史變得更加清晰。
特別註意,只能在自己使用的 feature 分支上進行 rebase 操作,不允許在整合分支上進行 rebase,因為這種操作會修改整合分支的歷史記錄。
來源:https://blog.csdn.net/qq_24147051
— END —
PS:防止找不到本篇文章,可以收藏點贊,方便翻閱尋找哦。
往期推薦