git 移动分支指针_图解4种git合并分支方法
有時候我們會后悔,有時候我們會想回到過去,有時候我們想改變歷史,然而在我們這個世界,目前來看是無法回到過去改變歷史的
但在git的世界里,一切皆有可能,我們可以在多維空間里任意切換,隨意改變一個宇宙的時間線,只要我們愿意,git的分支就是這么神奇
然而很多時候你以為你改變了歷史,不為人知,那個宇宙并沒有消失,而是遺失在了git的世界里,有能力的人便能找到
彼此分開的世界也能隨時交叉合并,世界就這樣開開合合,偶會需要解決合并沖突
git中的分支非常的輕量,其實(shí)就是一個文件,里面記錄了分支所指向的commit id,下圖中有兩個分支分別是master和test,他們都指向了A2這個提交,HEAD是一個特殊的指針,他永遠(yuǎn)指向你當(dāng)前所在的位置;有時候你可能不在某一個分支上,不要驚慌,你隨時有權(quán)利去你想去的分支,git賦予了你新建,切換分支的能力
然后有時候世界并不總?cè)缟蠄D那般美好,面對分叉的兩個分支,git新手總是一臉茫然,本文我將講述git中合并分支的方法
在git中合并分支有三種方法,分別是merge,rebase,cherry-pick,而其中merge又有三種區(qū)別,下面將一一介紹
fast-forward
如果待合并的分支在當(dāng)前分支的下游,也就是說沒有分叉時,會發(fā)生快速合并,從test分支切換到master分支,然后合并test分支
git checkout master
git merge test
這種方法相當(dāng)于直接把master分支移動到test分支所在的地方,并移動HEAD指針
no-ff
如果我們不想要快速合并,那么我們可以強(qiáng)制指定為非快速合并,只需加上--no-ff參數(shù)
git checkout master
git merge –no-ff test
這種合并方法會在master分支上新建一個提交節(jié)點(diǎn),從而完成合并
squash
svn的在合并分支時采用的就是這種方式,squash會在當(dāng)前分支新建一個提交節(jié)點(diǎn)
squash和no-ff非常類似,區(qū)別只有一點(diǎn)不會保留對合入分支的引用
git checkout master
git merge –squash test
rebase
當(dāng)要合并兩個分叉的分支時,merge的方式是將待合入分支和當(dāng)前分支不同的部分,在當(dāng)前分支新建節(jié)點(diǎn),如下圖所示
rebase與merge不同,rebase會將合入分支上超前的節(jié)點(diǎn)在待合入分支上重新提交一遍,如下圖,B1 B2會變?yōu)锽1' B2',看起來會變成線性歷史
cherry-pick
這命令簡直就是神器,給你自由,你想把那個節(jié)點(diǎn)merge過來就把那個節(jié)點(diǎn)merge過來,其合入的不是分支而是提交節(jié)點(diǎn)
總結(jié)
只有知道了這些合并方式的區(qū)別,才能git在手,天下我有,任你分支在凌亂,我自巋然不動
繼續(xù)學(xué)習(xí)
歡迎訂閱我的微信公眾帳號,只推送原創(chuàng)文字。掃碼或搜索:顏海鏡
總結(jié)
以上是生活随笔為你收集整理的git 移动分支指针_图解4种git合并分支方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 单片机定时器精准定时_8051单片机(S
- 下一篇: vue中怎么清空tab选项卡的缓存_vu