|
真正理解 git fetch, git pull 要講清楚git fetch,git pull,必須要附加講清楚git remote,git merge 、遠(yuǎn)程repo, branch 、 commit-id 以及 FETCH_HEAD。 1. 【git remote】首先, git是一個(gè)分布式的結(jié)構(gòu),這意味著本地和遠(yuǎn)程是一個(gè)相對(duì)的名稱(chēng)。 本地的repo倉(cāng)庫(kù)要與遠(yuǎn)程的repo配合完成版本對(duì)應(yīng)必須要有 git remote子命令,通過(guò)git remote add來(lái)添加當(dāng)前本地長(zhǎng)度的遠(yuǎn)程repo, 有了這個(gè)動(dòng)作本地的repo就知道了當(dāng)遇到git push 的時(shí)候應(yīng)該往哪里提交代碼。 2. 【git branch】其次,git天生就是為了多版本分支管理而創(chuàng)造的,因此分支一說(shuō),不得不提, 分支就相當(dāng)于是為了單獨(dú)記錄軟件的某一個(gè)發(fā)布版本而存在的,既然git是分布式的,便有了本地分支和遠(yuǎn)程分支一說(shuō),git branch 可以查看本地分支, git branch -r 可以用來(lái)查看遠(yuǎn)程分支。 本地分支和遠(yuǎn)程分支在git push 的時(shí)候可以隨意指定,交錯(cuò)對(duì)應(yīng),只要不出現(xiàn)版本從圖即可。 3. 【git merge】再者,git的分布式結(jié)構(gòu)也非常適合多人合作開(kāi)發(fā)不同的功能模塊,此時(shí)如果每個(gè)人都在其各自的分支上開(kāi)發(fā)一個(gè)相對(duì)獨(dú)立的模塊的話(huà),在每次release制作時(shí)都需先將各成員的模塊做一個(gè)合并操作,用于合并各成員的工作成果,完成集成。 此時(shí)需要的就是git merge. 4.【git push 和 commit-id】在每次本地工作完成后,都會(huì)做一個(gè)git commit 操作來(lái)保存當(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)程repo。 在理解了以上git要素之后,分析git fetch 和 git pull 就不再困難了。
首先,git fetch 有四種基本用法 1. git fetch →→ 這將更新git remote 中所有的遠(yuǎn)程repo 所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中 2. git fetch remote_repo →→ 這將更新名稱(chēng)為remote_repo 的遠(yuǎn)程repo上的所有branch的最新commit-id,將其記錄。 3. git fetch remote_repo remote_branch_name →→ 這將這將更新名稱(chēng)為remote_repo 的遠(yuǎn)程repo上的分支: remote_branch_name 4. git fetch remote_repo remote_branch_name:local_branch_name →→ 這將這將更新名稱(chēng)為remote_repo 的遠(yuǎn)程repo上的分支: remote_branch_name ,并在本地創(chuàng)建local_branch_name 本地分支保存遠(yuǎn)端分支的所有數(shù)據(jù)。
FETCH_HEAD: 是一個(gè)版本鏈接,記錄在本地的一個(gè)文件中,指向著目前已經(jīng)從遠(yuǎn)程倉(cāng)庫(kù)取下來(lái)的分支的末端版本。
git pull 的運(yùn)行過(guò)程: git pull : 首先,基于本地的FETCH_HEAD記錄,比對(duì)本地的FETCH_HEAD記錄與遠(yuǎn)程倉(cāng)庫(kù)的版本號(hào),然后git fetch 獲得當(dāng)前指向的遠(yuǎn)程分支的后續(xù)版本的數(shù)據(jù),然后再利用git merge將其與本地的當(dāng)前分支合并。
參考鏈接 : 1.https:///topics/4768 2.http:///questions/9237348/what-does-fetch-head-in-git-mean
|
|
|
來(lái)自: liang1234_ > 《git》