git rebase變基
初學(xué)git,在合并分支上必定會(huì)常用到 git merge 語(yǔ)法。git除了使用合并(merge)集成2個(gè)分支之間的更改,還有另外一種稱為rebase的方法。
git rebase <基礎(chǔ)分支>
rebase的作用是改變基點(diǎn)。rebase把當(dāng)前分支的基點(diǎn),由與基礎(chǔ)分支的共同祖先處,移動(dòng)到基礎(chǔ)分支的頭部位置處,然后以新基點(diǎn)為基礎(chǔ),重新提交當(dāng)前分支中的更改。
git rebase使用場(chǎng)景
Git中分支merge和rebase的適用場(chǎng)景及區(qū)別
參考URL: https://www.cnblogs.com/marblemm/p/7161614.html
git merge rebase的區(qū)別及應(yīng)用場(chǎng)景
參考URL: http://www.mamicode.com/info-detail-1774810.html
兩個(gè)使用場(chǎng)景是不一樣的,merge只是合并另外一個(gè)分支的內(nèi)容,rebase也合并另外一個(gè)分支的內(nèi)容,但是會(huì)把本分支的commits頂?shù)阶铐敹?/strong>
假設(shè)我們現(xiàn)在有3個(gè)分支
- master分支:線上環(huán)境使用的分支
- testing分支:測(cè)試環(huán)境使用的分支
- my_feature分支:開發(fā)新功能的分支,也就是當(dāng)前分支
A. 假設(shè)我在my_feature上開發(fā)了一段時(shí)間,之后另外的同事開發(fā)的功能正式上線到master分支了,那么我可以在當(dāng)前的分支下rebase一下master分支,這樣我這個(gè)分支的幾個(gè)commits相對(duì)于master還是處于最頂端的,也就是說(shuō)rebase主要用來(lái)跟上游同步,同時(shí)把自己的修改頂?shù)阶钌厦?/strong>
B. 我在my_feature上開發(fā)了一段時(shí)間了,想要放到testing分支上,那就切到testing,然后merge my_feature進(jìn)來(lái),因?yàn)槭莻€(gè)測(cè)試分支,commits的順序無(wú)所謂,也就沒(méi)必要用rebase (當(dāng)然你也可以用rebase)
另外,單獨(dú)使用rebase,還有調(diào)整當(dāng)前分支上commits的功能(合并,丟棄,修改commites msg)
git rebase還是git merge?
在開發(fā)過(guò)程中使用git rebase還是git merge,優(yōu)缺點(diǎn)分別是什么?
參考URL: https://www.zhihu.com/question/36509119
兩個(gè)使用場(chǎng)景是不一樣的,merge只是合并另外一個(gè)分支的內(nèi)容,rebase也合并另外一個(gè)分支的內(nèi)容,但是會(huì)把本分支的commits頂?shù)阶铐敹?/strong>
merge 的話,會(huì)產(chǎn)生一個(gè)commit,記錄合并的操作,可能是沒(méi)有沖突自動(dòng)生成的merge commit,也可能解決沖突后自己編寫的 commit??傊嗔艘粋€(gè) commit。
支持merge多一點(diǎn),原因如下:
- rebase過(guò)程中,一個(gè)commit出現(xiàn)沖突,下一個(gè)commit也極有可能出現(xiàn)沖突,一次rebase可能要解決多次沖突;
- 合并的歷史脈絡(luò)(沖突)被物理消滅了
- merge,合并結(jié)果不好看,一堆線交錯(cuò),但合并有沖突的話,只要解一次就行了;
來(lái)自網(wǎng)上:有人說(shuō):“團(tuán)隊(duì)里有新人且水平參差不齊的情況下,建議統(tǒng)一 git merge,不然容易出來(lái)麻花,過(guò)去解完麻花再傳授一番 git rebase 的原理,然后 git push -f 一發(fā)又有什么收益呢”。
為了追求Git的線好看,在團(tuán)隊(duì)合作中使用rebase說(shuō)輕點(diǎn)是舍本逐末,說(shuō)重了是對(duì)團(tuán)隊(duì)不負(fù)責(zé)任。個(gè)人以及本地項(xiàng)目無(wú)所謂。
總結(jié):支持merge多一點(diǎn),團(tuán)隊(duì)合作建議用merge。一般私有的用rebase,公開的用merge。(如果團(tuán)隊(duì)成員對(duì)于git的分支管理并不嫻熟,那我推薦使用merge。)**開源項(xiàng)目中,我們一般會(huì)推薦commitor在提交PR前做一次rebase。**審核通過(guò)后,PR的commit list會(huì)合并成一個(gè)patch打到主分支中。所以無(wú)論是不是做過(guò)rebase,最終表現(xiàn)在master上都只是一個(gè)獨(dú)立的commit。
在當(dāng)前分支做變基
Rebase Current onto Selected: 在當(dāng)前分支做變基。(將所選分支提交加入到當(dāng)前分支)
變基也是將一個(gè)分支的代碼整合到另外一個(gè)分支。跟merge功能類似,但也存在著很大的不同。變基可以把提交線整合得更加是一條直線。
$ git checkout dev
$ git rebase master
如上,我在dev分支,我選擇吧 dev變基 到main,意思就是把main和合并到到dev和merge功效差不多,不同的是我們的commit提交就是置于最新的頂端。
總結(jié):我們當(dāng)前在哪個(gè)分支,選擇某個(gè)分支,操作merge或者rebase都是把別人分支的東西合并到我當(dāng)前的分支上。
使用總結(jié)
我們可以在自己獨(dú)立的分支上,把代碼變基到協(xié)作分支上,這樣既不影響和別人的協(xié)作,也可以讓自己的分支更加的簡(jiǎn)潔。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-495296.html
在本地分支中使用 rebase 來(lái)合并主分支的改動(dòng),是為了讓你的本地提交記錄清晰可讀。(當(dāng)然, rebase 不只用來(lái)合并 master 的改動(dòng),還可以在協(xié)同開發(fā)時(shí) rebase 隊(duì)友的改動(dòng)。)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495296.html
到了這里,關(guān)于git-在當(dāng)前分支做變基(rebase current onto selected)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!