今天瞭解下git的rebase
功能,這裏假設你們已經對git有所學習了,所以不會講解git的其餘基礎用法。git是一款工具,因此學習的首要目的是明白其功能有什麼做用,這裏咱們一步一步來分析rebase
(變基)的做用。git
假設咱們須要建立一個分支用來開發產品的新功能,bash
git checkout -b feature
工具
能夠看到咱們當前只有兩個分支,而且已經切換到了feature
分支上。學習
接下來咱們在feature
分支下修改文件test.txt中的內容,在裏面添加content_feature
,保存而且提交。spa
git add test.txt
3d
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
這麼麻煩幹嗎啊??請下圖:
沒有變基的合併:
變基後的合併:
嗯嗯,沒錯了,變基的做用就是修整歷史,將分支歷史併入主線。
。。。是否是,這功能看起沒沒啥卵用,其實這功能是須要在某些場景下才會有明顯做用,好比當咱們向他人維護的開源項目提交修改時,確定要先在本身的分支中進行開發,而後再提交,但若是咱們變基後再提交,維護人員就不用進行整合工做了,直接快速合併便可。
感受這些做用對我來講仍是好遙遠的啊,,,因此,就先學習到這兒吧,這些比較高級的功能你沒實際的使用場景,學了也會很快忘記,瞭解瞭解便可,等到真的要用到時,也能加快咱們的學習速度。
參考: