git fetch和git pull的區(qū)別解析
簡(jiǎn)單概括兩者的概念
git fetch是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉到本地,用戶在檢查了以后決定是否合并到工作本機(jī)分支中。
而git pull 則是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉下來后直接合并,即:git pull = git fetch + git merge,這樣可能會(huì)產(chǎn)生沖突,需要手動(dòng)解決。
1.兩者相同點(diǎn)
先在作用上他們的功能是大致相同的,都是起到了更新代碼的作用。
2.不同點(diǎn)
首先我們要說簡(jiǎn)單說git的運(yùn)行機(jī)制。git分為本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù),我們一般情況都是寫完代碼,commit到本地倉(cāng)庫(kù)(生成本地倉(cāng)的commit ID,代表當(dāng)前提交代碼的版本號(hào)),然后push到遠(yuǎn)程倉(cāng)庫(kù)(記錄這個(gè)版本號(hào)),這個(gè)流程大家都熟悉。
我們本地的git文件夾里面對(duì)應(yīng)也存儲(chǔ)了git本地倉(cāng)庫(kù)master分支的commit ID 和 跟蹤的遠(yuǎn)程分支orign/master的commit ID(可以有多個(gè)遠(yuǎn)程倉(cāng)庫(kù))。那什么是跟蹤的遠(yuǎn)程分支呢,打開git文件夾可以看到如下文件:
.git/refs/head/[本地分支]
.git/refs/remotes/[正在跟蹤的分支]
其中head就是本地分支,remotes是跟蹤的遠(yuǎn)程分支,這個(gè)類型的分支在某種類型上是十分相似的,他們都是表示提交的SHA1校驗(yàn)和(就是commitID)。但是,不管他們是如何的相似,他們還是有一個(gè)重大的區(qū)別:更改遠(yuǎn)端跟蹤分支只能用git fetch,或者是git push后作為副產(chǎn)品(side-effect)來改變。我們無法直接對(duì)遠(yuǎn)程跟蹤分支操作,我們必須先切回本地分支然后創(chuàng)建一個(gè)新的commit提交。
拉取不同
1、Git fetch:Git fetch會(huì)將數(shù)據(jù)拉取到本地倉(cāng)庫(kù) - 它并不會(huì)自動(dòng)合并或修改當(dāng)前的工作。
2、git pull:git pull是從遠(yuǎn)程獲取最新版本并merge到本地,會(huì)自動(dòng)合并或修改當(dāng)前的工作。
commitID不同
1、Git fetch:使用Git fetch更新代碼,本地的庫(kù)中master的commitID不變,還是等于1。
2、git pull:使用git pull更新代碼,本地的庫(kù)中master的commitID發(fā)生改變,變成了2。
分支(branch)的基本操作
git branch //查看本地所有分支 git branch -r //查看遠(yuǎn)程所有分支 git branch -a //查看本地和遠(yuǎn)程的所有分支 git branch <branchname> //新建分支 git branch -d <branchname> //刪除本地分支 git branch -d -r <branchname> //刪除遠(yuǎn)程分支,刪除后還需推送到服務(wù)器 git push origin:<branchname> //刪除后推送至服務(wù)器 git branch -m <oldbranch> <newbranch> //重命名本地分支 /** *重命名遠(yuǎn)程分支: *1、刪除遠(yuǎn)程待修改分支 *2、push本地新分支到遠(yuǎn)程服務(wù)器 */ //git中一些選項(xiàng)解釋: -d --delete:刪除 -D --delete --force的快捷鍵 -f --force:強(qiáng)制 -m --move:移動(dòng)或重命名 -M --move --force的快捷鍵 -r --remote:遠(yuǎn)程 -a --all:所有
3.git fetch用法
git fetch 命令:
$ git fetch <遠(yuǎn)程主機(jī)名> //這個(gè)命令將某個(gè)遠(yuǎn)程主機(jī)的更新全部取回本地
如果只想取回特定分支的更新,可以指定分支名:
$ git fetch <遠(yuǎn)程主機(jī)名> <分支名> //注意之間有空格
最常見的命令如取回origin 主機(jī)的master 分支:
$ git fetch origin master
取回更新后,會(huì)返回一個(gè)FETCH_HEAD ,指的是某個(gè)branch在服務(wù)器上的最新狀態(tài),我們可以在本地通過它查看剛?cè)』氐母滦畔ⅲ?/p>
$ git log -p FETCH_HEAD
可以看到返回的信息包括更新的文件名,更新的作者和時(shí)間,以及更新的代碼(19行紅色[刪除]和綠色[新增]部分)。
我們可以通過這些信息來判斷是否產(chǎn)生沖突,以確定是否將更新merge到當(dāng)前分支。
4.git pull 用法
前面提到,git pull 的過程可以理解為
git fetch origin master //從遠(yuǎn)程主機(jī)的master分支拉取最新內(nèi)容 git merge FETCH_HEAD //將拉取下來的最新內(nèi)容合并到當(dāng)前所在的分支中
即將遠(yuǎn)程主機(jī)的某個(gè)分支的更新取回,并與本地指定的分支合并,完整格式可表示為:
$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略:
$ git pull origin next
5.拉取遠(yuǎn)程分支
git fetch //代碼拉取到本地之后 git branch //查看分支 git checkout 遠(yuǎn)程分支的分支名
參考文章
https://blog.csdn.net/qq_36113598/article/details/78906882
https://blog.csdn.net/weixin_41975655/article/details/82887273
到此這篇關(guān)于git fetch和git pull的區(qū)別的文章就介紹到這了,更多相關(guān)git fetch和git pull的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Scratch3.0二次開發(fā)之windows環(huán)境下打包成exe的流程
今天通過本文給大家分享Scratch3.0二次開發(fā)之windows環(huán)境下打包成exe的詳細(xì)流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-08-08解決啟動(dòng)Azkaban報(bào)錯(cuò)問題:java.lang.NoSuchMethodError: com.google.comm
這篇文章主要介紹了啟動(dòng)Azkaban報(bào)錯(cuò):java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.toImmutableMap,需要的朋友可以參考下2020-05-05Websocket直播間聊天室教程 GoEasy快速實(shí)現(xiàn)聊天室
這篇文章主要介紹了Websocket直播間聊天室教程 GoEasy快速實(shí)現(xiàn)聊天室,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Git 的基本操作、開發(fā)流程、實(shí)用技巧總結(jié)(陳彥貝)
這篇文章主要介紹了Git 的基本操作、開發(fā)流程、實(shí)用技巧總結(jié),需要的朋友可以參考下2017-09-09永恒之藍(lán)實(shí)戰(zhàn)教程之Mac通過Metasploit攻擊Server2008的詳細(xì)過程
這篇文章主要介紹了永恒之藍(lán)實(shí)戰(zhàn)教程?Mac通過Metasploit攻擊Server2008,首先準(zhǔn)備一個(gè)Server2008,主要功能是使網(wǎng)絡(luò)上的機(jī)器能夠共享計(jì)算機(jī)文件、打印機(jī)、串行端口和通訊等資源,需要的朋友可以參考下2022-08-08