首頁 > 軟體

git fetch和git pull的區別解析

2023-01-20 14:01:19

簡單概括兩者的概念

git fetch是將遠端主機的最新內容拉到本地,使用者在檢查了以後決定是否合併到工作本機分支中。
而git pull 則是將遠端主機的最新內容拉下來後直接合並,即:git pull = git fetch + git merge,這樣可能會產生衝突,需要手動解決。

1.兩者相同點

先在作用上他們的功能是大致相同的,都是起到了更新程式碼的作用。

2.不同點

首先我們要說簡單說git的執行機制。git分為本地倉庫和遠端倉庫,我們一般情況都是寫完程式碼,commit到本地倉庫(生成本地倉的commit ID,代表當前提交程式碼的版本號),然後push到遠端倉庫(記錄這個版本號),這個流程大家都熟悉。
我們原生的git資料夾裡面對應也儲存了git本地倉庫master分支的commit ID 和 跟蹤的遠端分支orign/master的commit ID(可以有多個遠端倉庫)。那什麼是跟蹤的遠端分支呢,開啟git資料夾可以看到如下檔案:

.git/refs/head/[本地分支]
.git/refs/remotes/[正在跟蹤的分支]

其中head就是本地分支,remotes是跟蹤的遠端分支,這個型別的分支在某種型別上是十分相似的,他們都是表示提交的SHA1校驗和(就是commitID)。但是,不管他們是如何的相似,他們還是有一個重大的區別:更改遠端跟蹤分支只能用git fetch,或者是git push後作為副產品(side-effect)來改變。我們無法直接對遠端跟蹤分支操作,我們必須先切回本地分支然後建立一個新的commit提交。

拉取不同
1、Git fetch:Git fetch會將資料拉取到本地倉庫 - 它並不會自動合併或修改當前的工作。
2、git pull:git pull是從遠端獲取最新版本並merge到本地,會自動合併或修改當前的工作。
commitID不同

1、Git fetch:使用Git fetch更新程式碼,原生的庫中master的commitID不變,還是等於1。
2、git pull:使用git pull更新程式碼,原生的庫中master的commitID發生改變,變成了2。
分支(branch)的基本操作

git branch //檢視本地所有分支 

git branch -r //檢視遠端所有分支

git branch -a //檢視本地和遠端的所有分支

git branch <branchname> //新建分支

git branch -d <branchname> //刪除本地分支

git branch -d -r <branchname> //刪除遠端分支,刪除後還需推播到伺服器
git push origin:<branchname>  //刪除後推播至伺服器

git branch -m <oldbranch> <newbranch> //重新命名本地分支
/**
*重新命名遠端分支:
*1、刪除遠端待修改分支
*2、push本地新分支到遠端伺服器
*/

//git中一些選項解釋:

-d
--delete:刪除

-D
--delete --force的快捷鍵

-f
--force:強制

-m
--move:移動或重新命名

-M
--move --force的快捷鍵

-r
--remote:遠端

-a
--all:所有

3.git fetch用法

git fetch 命令:

$ git fetch <遠端主機名> //這個命令將某個遠端主機的更新全部取回本地

如果只想取回特定分支的更新,可以指定分支名:

$ git fetch <遠端主機名> <分支名> //注意之間有空格

最常見的命令如取回origin 主機的master 分支:

$ git fetch origin master

取回更新後,會返回一個FETCH_HEAD ,指的是某個branch在伺服器上的最新狀態,我們可以在本地通過它檢視剛取回的更新資訊:

$ git log -p FETCH_HEAD

可以看到返回的資訊包括更新的檔名,更新的作者和時間,以及更新的程式碼(19行紅色[刪除]和綠色[新增]部分)。

我們可以通過這些資訊來判斷是否產生衝突,以確定是否將更新merge到當前分支。

4.git pull 用法

前面提到,git pull 的過程可以理解為

git fetch origin master //從遠端主機的master分支拉取最新內容 
git merge FETCH_HEAD    //將拉取下來的最新內容合併到當前所在的分支中

即將遠端主機的某個分支的更新取回,並與本地指定的分支合併,完整格式可表示為:

$ git pull <遠端主機名> <遠端分支名>:<本地分支名>

如果遠端分支是與當前分支合併,則冒號後面的部分可以省略:

$ git pull origin next

5.拉取遠端分支

git fetch  //程式碼拉取到本地之後
git branch //檢視分支
git checkout 遠端分支的分支名 

參考文章
https://blog.csdn.net/qq_36113598/article/details/78906882

https://blog.csdn.net/weixin_41975655/article/details/82887273

到此這篇關於git fetch和git pull的區別的文章就介紹到這了,更多相關git fetch和git pull的區別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com