git fetch 遠(yuǎn)程庫名稱 遠(yuǎn)程分支名稱:分支名稱
git pull 遠(yuǎn)程庫名稱 遠(yuǎn)程分支名稱
遠(yuǎn)程庫 位于github中:

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

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

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

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

此時(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)行合并。

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

解決沖突完畢之后,自動(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

也可能是這樣的:

在本地每次從遠(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)即可。

這就完成了本地倉庫和遠(yuǎn)程倉庫的同步。
git fetch 遠(yuǎn)程倉庫名稱 遠(yuǎn)程倉庫分支名稱:本地分支名稱
git fetch origin master:new

在當(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è)。
如下圖:

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

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

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

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

本地倉庫和遠(yuǎn)程倉庫達(dá)到一致。