git fetch 和 git pull

git fetch 遠(yuǎn)程庫名稱 遠(yuǎn)程分支名稱:分支名稱

git pull 遠(yuǎn)程庫名稱 遠(yuǎn)程分支名稱

遠(yuǎn)程庫 位于github中:


1.png

遠(yuǎn)程倉庫中 driver.txt的內(nèi)容為 SqlServerDriver
本地倉庫 為于pc/windows10/wangbinghua 主機(jī)上:


2.png

本機(jī)上的driver.txt 中內(nèi)容為 MySqlDriver,這個(gè)內(nèi)容是一個(gè)舊版本的內(nèi)容,因此需要從遠(yuǎn)程上獲取最新的內(nèi)容。
本地分支圖:
3.png

如果之間沒有任何的和遠(yuǎn)程倉庫相關(guān)的操作,那么 origin/master 分支始終指向某一個(gè)commit節(jié)點(diǎn),而不會(huì)發(fā)生改變,唯一可以改變的是本地的master分支,即每次在本地進(jìn)行一次提交,那么HEAD指針就會(huì)向前走一步。當(dāng)前的HEAD指針,即是master分支或者其他的分支。


4.png

現(xiàn)在進(jìn)行操作 git fetch origin master,即將遠(yuǎn)程的最新更新內(nèi)容從遠(yuǎn)程倉庫中取出來,那么origin/master 即遠(yuǎn)程master分支,將會(huì)前進(jìn)。
5.png

此時(shí)只要在本地進(jìn)行 add 和 commit操作,那么本地的HEA指針對(duì)應(yīng)的master分支就會(huì)向前進(jìn)。從而網(wǎng)絡(luò)圖中就可以看到在本地出現(xiàn)了兩條分支 origin/master 和 master分支。當(dāng)然,origin/master 分支是隱形的。通過git branch –a是無法看到的。
出現(xiàn)這兩個(gè)分支,接下來要進(jìn)行的操作就是要合并分支,將master分支和origin/master分支進(jìn)行合并。
切換到master分支上,進(jìn)行合并,git merge origin/master 將origin/master 分支進(jìn)行合并。
6.png

master分支和origin/master 分支在合并的過程中必然會(huì)出現(xiàn)沖突,因此要解決沖突,解決沖突之后,文件內(nèi)容必然會(huì)發(fā)生變化,因此要將有沖突內(nèi)容的文件進(jìn)行add和commit,因此本地分支的節(jié)點(diǎn)向前增加一個(gè)。
7.png

解決沖突完畢之后,自動(dòng)合并分支。但是問題出現(xiàn)了,origin/master 即遠(yuǎn)程master分支和本地的master分支,并不進(jìn)行同步,要和遠(yuǎn)程倉庫進(jìn)行聯(lián)系,使得遠(yuǎn)程的master分支和本地的master分支進(jìn)行同步,即讓origin/master分支也要處在本地的HEAD指針指向的master分支上。否則遠(yuǎn)程倉庫和本地倉庫就無法進(jìn)行同步。因此在本地的master分支上,進(jìn)行push操作。git push origin master
8.png

也可能是這樣的:


9.png

在本地每次從遠(yuǎn)程倉庫fetch一次,節(jié)點(diǎn)便向后增加一個(gè),那么origin/master 分支始終指向最后一次fetch的節(jié)點(diǎn)。那么origin/master 分支要和 本地的master進(jìn)行合并,此時(shí)不需要考慮沖突的問題,直接切換到本地的master分支,git merge origin/master 操作。此時(shí),只需要 fast forward,本地的HEAD指針,迅速向前移動(dòng)即可。
10.png

這就完成了本地倉庫和遠(yuǎn)程倉庫的同步。

git fetch 遠(yuǎn)程倉庫名稱 遠(yuǎn)程倉庫分支名稱:本地分支名稱
git fetch origin master:new


11.png

在當(dāng)前的HEAD指針指向的commit節(jié)點(diǎn)處會(huì)生成一個(gè)new分支,這個(gè)new分支負(fù)責(zé)和遠(yuǎn)程origin/master 分支進(jìn)行同步,new分支保持和遠(yuǎn)程庫的master分支內(nèi)容同步。每次fetch一次到new分支上,節(jié)點(diǎn)向后面增加一個(gè)。
不斷fetch完成之后,在本地分支上進(jìn)行不斷提交,每次提交到本地master分支一次,master分支的節(jié)點(diǎn)向后面增加一個(gè)。
如下圖:


12.png

此時(shí)要對(duì)master分支和new分支進(jìn)行合并,必然會(huì)出現(xiàn)沖突,解決完沖突之后,文件的內(nèi)容必然會(huì)發(fā)生變化,因此要將有沖突內(nèi)容的文件重新提交到本地的master分支上。因此在本地master分支上,又會(huì)增加一個(gè)節(jié)點(diǎn)。
13.png

因此切換到master分支上,執(zhí)行 git merge new
14.png

解決完畢沖突,合并完畢之后,發(fā)現(xiàn) master分支和遠(yuǎn)程庫的origin/master分支,不進(jìn)行同步,因此執(zhí)行 git push origin master,使得origin/master 分支也指向本地master分支,使得本地庫和遠(yuǎn)程庫進(jìn)行同步。


15.png

同步完畢之后,本地的new分支沒有用,則可以進(jìn)行刪除。git branch –delete new。即將new分支進(jìn)行刪除掉。
16.png

本地倉庫和遠(yuǎn)程倉庫達(dá)到一致。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 晨讀感悟堅(jiān)持了一個(gè)多月了,我深知,這種堅(jiān)持的不易,然而,我更理解了,如果只是簡單的重復(fù),你的堅(jiān)持其實(shí)也毫無意義。 ...
    曉蕓will閱讀 267評(píng)論 2 11
  • 愛因斯坦提出相對(duì)論后,震驚世界,于是被很多大學(xué)邀請去做報(bào)告,愛因斯坦因此而被弄得疲憊不堪。 有一天,司機(jī)對(duì)他說:“...
    伊琦閱讀 813評(píng)論 0 0
  • 我已擁有了 一大片 金黃色的海 以及無邊的星芒 我已擁有了 那金黃色的 海的深淵 以及來自于深淵的猛獸們 它們和...
    唐晟藝閱讀 275評(píng)論 0 2
  • 對(duì)做前端開發(fā)的同學(xué)來說,請求排隊(duì)、網(wǎng)絡(luò)、Web 應(yīng)用程序、頁面加載、資源下載這些針對(duì)網(wǎng)站的性能指標(biāo)是很熟悉的。對(duì)白...
    OneAPM閱讀 476評(píng)論 2 5

友情鏈接更多精彩內(nèi)容