<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          兩條命令讓你的git輕松自動(dòng)變基,學(xué)到了!

          共 2224字,需瀏覽 5分鐘

           ·

          2021-11-09 22:13

          大廠技術(shù)??高級(jí)前端??Node進(jìn)階

          點(diǎn)擊上方?程序員成長(zhǎng)指北,關(guān)注公眾號(hào)

          回復(fù)1,加入高級(jí)Node交流群

          作者:張京?

          鏈接:https://segmentfault.com/a/1190000040712052

          為什么要變基

          Git官方文檔中提到:

          在 Git 中整合來(lái)自不同分支的修改主要有兩種方法:merge 以及 rebase

          merge也就是合并,這個(gè)概念很容易理解,我們從分支上拉取代碼進(jìn)行修改,再提交的時(shí)候,如果遇到了別人的修改,則把我們的修改和他們的修改合并一下。那么rebase中文譯為變基是什么意思呢?

          首先要理解這個(gè)base,base也就是基礎(chǔ)的意思,當(dāng)我們從代碼分支上獲取代碼的時(shí)候,我們就有了一個(gè)基礎(chǔ),也就是base,此后的修改我們都是在這個(gè)基礎(chǔ)之上進(jìn)行的,但是當(dāng)我們需要提交修改的時(shí)候,遇到了別人的代碼,變基這個(gè)操作就是在這個(gè)時(shí)候,我們不去合并別人的代碼,而是直接把我們?cè)鹊幕A(chǔ)變掉,變成以別人修改過(guò)后的新代碼為基礎(chǔ),把我們的修改在這個(gè)新的基礎(chǔ)之上重新進(jìn)行?;A(chǔ)變掉了,所以叫作變基

          那么,變基有什么好處呢?好處之一是可以使我們的時(shí)間線變得非常干凈,以前采用合并的時(shí)候,時(shí)間線里完整記錄了我們的代碼是從哪個(gè)基礎(chǔ)上拉取出來(lái)的,做了哪些修改,然后又在哪個(gè)時(shí)間點(diǎn)合并回分支去,而采用變基之后,時(shí)間線上不再反映拉取的時(shí)間點(diǎn),因?yàn)槊看翁峤欢际且宰钚麓a為基礎(chǔ)的,所以時(shí)間線就變成了一根直線。

          下面拿兩個(gè)真實(shí)例子給大家更直觀地看一下:

          這是采用自動(dòng)變基之前的時(shí)間線,可以看到,各種混亂:

          這是采用自動(dòng)變基之后的時(shí)間線,非常整齊,可以很清楚地看到哪一次修改之后又發(fā)生了什么修改,而不是多次修改糾纏在一起:

          自動(dòng)變基

          雖然網(wǎng)上關(guān)于變基的教程很多,但是一般初學(xué)者總會(huì)感到茫然,不敢輕易下手,怕萬(wàn)一把時(shí)間線弄壞了,一發(fā)不可收拾。而且所有關(guān)于變基的命令都和我們已經(jīng)多年習(xí)慣了的pull/add/commit/push不一樣,很多圖形化的工具例如vscode也不直接支持rebase這樣的命令,都需要手工輸入,繁瑣而且容易出錯(cuò)。所以我們今天不講太多的rebase命令怎么用,而直接用兩條命令設(shè)置一下,從此以后讓你每次提交都可以自動(dòng)變基,而不必改變之前的任何操作習(xí)慣。這兩條命令就是:

          git?config?--global?pull.rebase?true
          git?config?--global?rebase.autoStash?true

          這兩條命令在任意一臺(tái)電腦上都只需要設(shè)置一次,而且一次設(shè)置,全局生效,所有的項(xiàng)目以后每次pull/push都會(huì)自動(dòng)變基,再也不用擔(dān)心在提交之前忘記變基了。

          原理

          如果不想了解原理的話,則執(zhí)行完上面兩條命令就可以去開(kāi)心地變基了,完全沒(méi)有問(wèn)題。如果想了解一些原理,可以接著往下看。下面我們來(lái)詳細(xì)解釋一下這兩條命令的原理:

          首先,我們要搞清楚一點(diǎn):什么時(shí)機(jī)是變基的時(shí)機(jī)?一般理解是推送的時(shí)候,其實(shí)不是,而是從拉取的時(shí)候就要開(kāi)始變基了,因?yàn)槟憷〉臅r(shí)候,服務(wù)器上可能已經(jīng)有新代碼了,所以要變基也是在這個(gè)時(shí)候,一旦發(fā)現(xiàn)有新基礎(chǔ)了,則立馬變掉。

          所以,通常情況下,我們拉取新代碼無(wú)非就是一個(gè)命令:git pull,但現(xiàn)在我們要變基拉取,就需要用git pull --rebase。但是每次這樣執(zhí)行命令就會(huì)很麻煩,而且你在vscode里也沒(méi)有辦法自動(dòng)加這個(gè)參數(shù),所以為了方便起見(jiàn),我們就設(shè)置一下第一條命令,這樣每次拉取它都會(huì)自動(dòng)變基。

          但是自動(dòng)變基往往會(huì)帶來(lái)一個(gè)額外的問(wèn)題,那就是每次當(dāng)你手頭有正在編輯的文件的時(shí)候,它就說(shuō)它無(wú)法變基,因?yàn)槟愕墓ぷ鲄^(qū)不干凈。為什么不變基的時(shí)候沒(méi)有這個(gè)問(wèn)題,而一旦選擇了自動(dòng)變基,工作區(qū)就必須保持干凈呢?因?yàn)樽兓牟僮髟硎撬枰劝涯惚镜卮a庫(kù)里還沒(méi)有推送的那部分提交反向釋放到工作區(qū),然后從服務(wù)器拉取新代碼,再以新代碼為基礎(chǔ)把工作區(qū)里的修改附加上去,因?yàn)橛羞@個(gè)過(guò)程,所以它必須要求你的服務(wù)區(qū)是干凈的。

          為此git提了兩個(gè)建議:要么你把所有修改先全部都commit到本地,要么你把它們都stash保存起來(lái)。首先說(shuō),commit肯定不是一個(gè)好主意,因?yàn)楹苡锌赡苓@時(shí)候我們的工作做到一半,還不適合commit,如果每次pullcommit一下的話,那么分支樹(shù)上會(huì)多出很多無(wú)用的節(jié)點(diǎn)。

          那只剩下最后一個(gè)選擇,就是每次pull之前都stash一下,pull完了之后再把stash的內(nèi)容pop出來(lái),但這樣豈不是更麻煩?所以這里我們用第二條命令設(shè)置一下,每次rebase的時(shí)候都自動(dòng)把我們工作區(qū)里的內(nèi)容自動(dòng)stash進(jìn)去,rebase完成之后再自動(dòng)恢復(fù)出來(lái)。

          其余要注意的就是有沖突的時(shí)候,如果有沖突,則合并完沖突之后,執(zhí)行一下git rebase --continue就好了,其它和原先的用法沒(méi)有任何區(qū)別。

          Node 社群


          我組建了一個(gè)氛圍特別好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你對(duì)Node.js學(xué)習(xí)感興趣的話(后續(xù)有計(jì)劃也可以),我們可以一起進(jìn)行Node.js相關(guān)的交流、學(xué)習(xí)、共建。下方加 考拉 好友回復(fù)「Node」即可。


          ???“分享、點(diǎn)贊、在看” 支持一波??

          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩18成人久久久 | 黃色A片成人直播啪啪 | 三级片亚洲无码 | 日本成人片在线看 | 黄片视频在线免费看 |