Git是工作中常用的工具,現(xiàn)在關(guān)于Git命令的問題在面試中也越來越常見帽驯。相信大家對(duì)常用的命令都非常熟悉了龟再,但是可能沒有深究過細(xì)節(jié)。今天小編就幫大家分析一下git pull 和 git fetch的區(qū)別尼变。
二者的區(qū)別可以這樣簡單的理解:**git pull = git fetch + git merge **利凑。面試如果遇到這個(gè)問題可以先給出這樣的回答,面試官就會(huì)覺得你理解了核心的區(qū)別嫌术。
那git ftech做了什么事情呢哀澈?先說兩個(gè)概念:
FETCH_HEAD: 是一個(gè)版本鏈接,記錄在本地的.git/FETCH_HEAD文件中度气,指向著目前已經(jīng)從遠(yuǎn)程倉庫取下來的分支的末端版本割按。
commit-id:在每次本地工作完成后,都會(huì)做一個(gè)git commit 操作來保存當(dāng)前工作到本地的repo磷籍, 此時(shí)會(huì)產(chǎn)生一個(gè)commit-id适荣,這是一個(gè)能唯一標(biāo)識(shí)一個(gè)版本的序列號(hào)现柠。 在使用git push后,這個(gè)序列號(hào)還會(huì)同步到遠(yuǎn)程倉庫弛矛。
FETCH_HEAD文件及其內(nèi)容
git fetch會(huì)更新git remote 中所有的遠(yuǎn)程倉庫所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中够吩。 也會(huì)拉取代碼到分支,只是不會(huì)合并丈氓。
例如獲取master分支的提交更新:
git fetch origin master
fetch后可以通過命令 **git log -p FETCH_HEAD **查看更新的提交內(nèi)容:
在fetch之后废恋,可以用git diff查看改動(dòng),git merge合并代碼扒寄。
git pull : 首先鱼鼓,基于本地的FETCH_HEAD記錄,比對(duì)本地的FETCH_HEAD記錄與遠(yuǎn)程倉庫的版本號(hào)该编,然后git fetch 獲得當(dāng)前指向的遠(yuǎn)程分支的后續(xù)版本的數(shù)據(jù)迄本,然后再利用git merge將其與本地的當(dāng)前分支合并。所以可以認(rèn)為git pull是git fetch和git merge兩個(gè)步驟的結(jié)合课竣。