日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git pull原理

發布時間:2024/1/1 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git pull原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. git fetch

如果遠程倉庫新建分支,或者有新的commit,使用git fetch 會把本地對應的遠程分支信息進行更新

在遠程倉庫新建一個dev 分支,并在遠程dev分支上進行一次commit然后本地執行git fetch

可以發現本地倉庫會有如下變化:

①是 objects文件夾下會多出3個目錄,3個文件夾(對應遠程dev分支的一次commit)
一個是blob對象, 一個是tree對象, 一個是commit對象

②同時本地會在refs/remotes下多出dev文件
③在logs下也會有dev文件

④關鍵地方是會生成FETCH_HEAD文件

FETCH_HEAD文件中存儲的是遠程倉庫分支的最新信息
此時我們是在master分支上進行的git fetch,
那么FETCH_HEAD文件中第一行就是顯示master分支的最新信息

如果此時我們切換到dev分支,那么那么FETCH_HEAD文件中第一行就是顯示dev分支的最新信息

2. git pull = git fetch + git merge

我們在遠程倉庫的dev分支進行一次commit
到本地執行一次tree .git/ 查看git文件夾狀態 ,此時是有19個文件夾,22個文件

為了更好演示git pull,我們本地切換到dev 分支進行git pull -v
(加上 -v 參數,可以查看更多信息)

git pull時 首先會執行git fetch, 先把本地的遠程分支信息壓縮到git-upload-pack文件然后post到遠程倉庫
這樣git 把本地的遠程分支與 遠程倉庫分支進行比較,才知道需要更新哪些信息

可以發現,這里git fetch 更新了本地的dev遠程分支(因為我們在github上對dev分支進行了一次commit)
git fetch后, 執行了一次git merge(這里是fast - forward模式)
因此我們本地的dev 分支此時是落后于遠程dev分支一個commit,所以這里是fast-forward模式

執行git pull后,本地的git文件夾數量也發送了變化,由之前的19個目錄,22個文件變成了22個目錄,26個文件

這里新增的目錄和文件主要是執行了一次git fetch
本地會增加這一次commit對應的3個目錄,3個文件;
同時還多了一個ORIGIN_HEAD文件

可以發現ORIGIN_HEAD文件中存儲的是一個commit對象的hash值,而這個hash值正好是本地的dev分支合并之前所指的commit對象

這個ORIGIN_HEAD文件有什么用處呢??
可以用來回滾
比如,我們想撤銷這一次git pull,想回到pull之前的狀態,那我們可以執行

執行git branch -vv進行查看 ( 可以查看到本地分支與遠程分支的同步關系)

可以發現本地dev分支已經回退,此時落后于遠程dev分支一次commit

此時如果我們又想回到回到dev分支最新狀態,可以在dev分支上于origin/dev進行merge

發現本地dev分支和遠程dev分支保持同步!!

總結

以上是生活随笔為你收集整理的git pull原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。