git clone、git pull和git fetch的用法及區別 git clone、git pull和git fetch的用法及區別

 

git clone、git pull和git fetch的用法及區別

聲明:碼字不易,轉載請註明出處,歡迎文章下方討論交流。Git 常用命令速查表

最近在一個學習小組裏學習AI的課程,我們所有的學習資料和homework都放在gitlab上。今天一個小隊友從gitlab上load倉庫的時候問起了這個問題,正好在此總結記錄一下,僅供參考。

1.git clone

git clone顧名思義就是將其他倉庫克隆到本地,包括被clone倉庫的版本變化。舉個例子,你當前目錄比方說是在e:/course/中,此時若想下載遠程倉庫,本地無需git init,直接git clone url(url是你遠程倉庫的地址,直接複製就可以了)。執行git clone等待clone結束,e:/course/目錄下自動會有一個.git的隱藏文件夾(如果看不見,請嘗試設置隱藏文件夾可見),因爲是clone來的,所以.git文件夾裏存放着與遠程倉庫一模一樣的版本庫記錄。clone操作是一個從無到有的克隆操作,再次強調不需要git init初始化。

git clone的用法:

$ git clone <版本庫的url>

例如克隆TensorFlow:

$ git clone https://github.com/tensorflow/tensorflow.git

或者使用SSH協議:

$ git clone [email protected]:tensorflow/tensorflow.git

這樣就會在本地生成一個目錄,該目錄與遠程倉庫同名。
However,如果本地目錄不想與遠程倉庫同名怎麼辦??也有辦法,將目錄名作爲git clone命令的第二個參數:

$ git clone <版本庫的網址> <本地目錄名>

2.git pull

git pull是拉取遠程分支更新到本地倉庫的操作。比如遠程倉庫裏的學習資料有了新內容,需要把新內容下載下來的時候,就可以使用git pull命令。事實上,git pull是相當於從遠程倉庫獲取最新版本,然後再與本地分支merge(合併)。
  即:git pull = git fetch + git merge

注:git fetch不會進行合併,執行後需要手動執行git merge合併,而git pull拉取遠程分之後直接與本地分支進行合併。更準確地說,git pull是使用給定的參數運行git fetch,並調用git merge將檢索到的分支頭合併到當前分支中。

git pull的用法:

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

舉例:將遠程主機origin的master分支拉取過來,與本地的branchtest分支合併。

$ git pull origin master:branchtest

如果將冒號和後面的branchtest去掉,則表示將遠程origin倉庫的master分支拉取下來與本地當前分支合併。
以上的git pull操作如果用git fetch來表示:

$ git fetch origin master:brantest
$ git merge brantest

相比起來,git fetch更安全也更符合實際要求,因爲可以在merge前,我們可以查看更新情況,根據實際情況再決定是否合併。

3.git fetch 更新遠程代碼到本地倉庫

理解 fetch 的關鍵, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某個branch在服務器上的最新狀態’。這個列表保存在 .Git/FETCH_HEAD 文件中, 其中每一行對應於遠程服務器的一個分支。
當前分支指向的FETCH_HEAD, 就是這個文件第一行對應的那個分支.
一般來說, 存在兩種情況:

  • 如果沒有顯式的指定遠程分支, 則遠程分支的master將作爲默認的FETCH_HEAD
  • 如果指定了遠程分支, 就將這個遠程分支作爲FETCH_HEAD

git fetch更新本地倉庫的兩種用法:

# 方法一
$ git fetch origin master                #從遠程的origin倉庫的master分支下載代碼到本地的origin maste
$ git log -p master.. origin/master      #比較本地的倉庫和遠程參考的區別
$ git merge origin/master                #把遠程下載下來的代碼合併到本地倉庫,遠程的和本地的合併
# 方法二
$ git fetch origin master:temp           #從遠程的origin倉庫的master分支下載到本地並新建一個分支temp
$ git diff temp                          #比較master分支和temp分支的不同
$ git merge temp                         #合併temp分支到master分支
$ git branch -d temp                     #刪除temp

碼字不易,如對您有幫助,歡迎點贊收藏打賞^_^

原文地址:https://segmentfault.com/a/1190000017030384

 

https://www.cnblogs.com/lalalagq/p/9968949.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章