git:rebase(變基)的使用和理解

今天瞭解下git的rebase功能,這裏假設你們已經對git有所學習了,所以不會講解git的其餘基礎用法。git是一款工具,因此學習的首要目的是明白其功能有什麼做用,這裏咱們一步一步來分析rebase(變基)的做用。git

假設咱們須要建立一個分支用來開發產品的新功能,bash

 git checkout -b feature工具

能夠看到咱們當前只有兩個分支,而且已經切換到了feature分支上。學習

接下來咱們在feature分支下修改文件test.txt中的內容,在裏面添加content_feature,保存而且提交。spa

git add test.txt3d

git commit -m 'feature分支'code

查看下提交的狀況:cdn

git log --graph --pretty=oneline --abbrev-commit blog


這時,feature分支的功能開發完成了,可有時咱們可能也會在master分支下,對同一個文件作出修改。如這時咱們在master分支下對test.txt文件添加的內容爲content_master教程

一樣是保存而且提交。

git add test.txt

git commit -m 'master分支'


接下來是重點,當咱們feature新功能開發完成時,就要合併到主分支中了。

git merge featture


能夠看到合併內容有衝突,咱們須要手動修改。那就改爲content_master_feature吧。


接下來從新提交完成合並:

git add test.txt

git commit -m 'merge_master_feature'


能夠看到合併成功。

。。。。總算該講到rebase(變基)了。

變基其實也是一種合併分支的方法。如咱們能夠切換到feature分支下後,再用git reabse master命令進行分支合併。爲何要切換到feature分支下呢?而這句命令又是什麼意思?

首先,咱們得知道,使用merge合併時,實際上是一種三方合併,就是修改後的master分支和feature分支,是以修改前的master分支爲基礎進行的合併。盜圖:


能夠認爲c3,c4分別表明修改後的master分支,feature分支,而c2就是修改前的master分支,作爲c3,c4基礎的。

這時再看rebase變基這個名稱,不就變換基礎嗎?那把誰變成基礎分支呢?再盜圖:


能夠看到,咱們把c3做爲基礎了,也就時修改後master分支,而feature分支的變化直接做用在master分支上,造成了新的master分支c4'。實現這些的命令:

git checkout feature

git rebase master


和以前同樣,先要解決衝突,而且如何解決的方法都提供給咱們了。

git add test.txt

git rebase --continue

這時,feature(c4')分支就以修改後的master(c3)分支爲基礎進行的改變。
接下來就能夠切換回master分支,並快速合併兩個分支。

$ git checkout master
$ git merge feature複製代碼


說到這,,有點想罵人了是不,不是有merge了嗎?要rebase這麼麻煩幹嗎啊??請下圖:

沒有變基的合併:


變基後的合併:


嗯嗯,沒錯了,變基的做用就是修整歷史,將分支歷史併入主線

。。。是否是,這功能看起沒沒啥卵用,其實這功能是須要在某些場景下才會有明顯做用,好比當咱們向他人維護的開源項目提交修改時,確定要先在本身的分支中進行開發,而後再提交,但若是咱們變基後再提交,維護人員就不用進行整合工做了,直接快速合併便可。

感受這些做用對我來講仍是好遙遠的啊,,,因此,就先學習到這兒吧,這些比較高級的功能你沒實際的使用場景,學了也會很快忘記,瞭解瞭解便可,等到真的要用到時,也能加快咱們的學習速度。

參考:

git的官網教程

某個大神的深刻講解

相關文章
相關標籤/搜索