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

聲明:碼字不易,轉載請註明出處,歡迎文章下方討論交流。

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

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初始化。github

git clone的用法:

$ git clone <版本庫的url>

例如克隆TensorFlow:安全

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

或者使用SSH協議:服務器

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

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

$ 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分支合併。fetch

$ git pull origin master:branchtest

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

$ git fetch origin master:brantest
$ git merge brantest

相比起來,git fetch更安全也更符合實際要求,由於能夠在merge前,咱們能夠查看更新狀況,根據實際狀況再決定是否合併。code

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

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

  • 若是沒有顯式的指定遠程分支, 則遠程分支的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

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

相關文章
相關標籤/搜索