深入瞭解Git遠程操作01:跟蹤分支與遠程跟蹤分支

1、基礎瞭解

  • 跟蹤分支(tracking branch)
  • 遠程跟蹤 分支(remote tracking branch)
  • 分支只是指向某個commit對象的引用,

2、深入理解跟蹤分支與遠程跟蹤分支

  1. 假設遠程倉庫有兩個commit(提交),分別是C1與C2,並且當前分支是master指向這個最新提交C2.
    在這裏插入圖片描述
  2. 通過命令:git clone 遠程倉庫地址,將這個遠程倉庫克隆到本地中,會在本地倉庫生成一個origin/master的引用並且指向最新的提交C2(此處對應遠程倉庫的分支master指向的最新提交的C2),此時這個origin/master即爲遠程跟蹤分支,它是用戶只讀。
    在這裏插入圖片描述
  3. 建立了這樣的引用後還會根據origin/master生成一個master分支指向同一個C2,這個分支即爲跟蹤分支,這個是用戶可寫的。
    在這裏插入圖片描述
  4. 我們在本地新添加一個commit(提交)C3,這時master的應用就指向了這個C3,即master所指向的內容是我們本地提交的時候可以改變的(也就是如果本地提交了C3此時master就指向C3,如果本地又提交了C4此時master就指向C4)
    在這裏插入圖片描述
  5. 本地提交C3後master指向了C3,那麼origin/master是如何變更呢?此時我們通過命令:git push,將本地倉庫推送到遠程倉庫中,此處遠程倉庫中的分支master也指向了最新的提交C3。
    在這裏插入圖片描述
  6. 此時git push還會做一件事情,它會將本地的origin/master指向本地的C3,我們本地是不能修改origin/master的指向的。
    在這裏插入圖片描述
  7. 遠程跟蹤分支用戶只讀還有一層意思就是:我們咋git本地操作中,可以通過命令:git checkout master來切換到master分支,這時相當於吧HEAD引用指向了master分支。但是如果我們使用:git checkout origin/master的時候我們的HEAD引用並不會指向origin/master,當我們執行了git checkout origin/master這個操作後我們是處於detached Head狀態下,在這種狀態下繼續提交的話再切換爲master分支那我們這些提交只能通過reflog這個記錄來尋回了,而不能通過origin/master來找回我們的提交。

3、實戰講解

  • 準備工作:現在遠程倉庫中新建一個test01倉庫,新建一個001.txt文件,文件內容爲111111;在本地任意磁盤中新建一個文件用於存放遠程倉庫(此處爲E:\github_test),將遠程倉庫克隆到本地倉庫中。
    在這裏插入圖片描述在這裏插入圖片描述
  • 進入到克隆下來的倉庫文件夾中,查看當前歷史歷史,可以看到origin/master與master均指向藍色線處的提交。
    在這裏插入圖片描述
  • 新建一個提交:修改001.txt文件,並提交。此時再次查看歷史,即可看到分支master已經比origin/master前進了一個提交。通過命令:git push origin master,把分支maste推送到遠程倉庫中。再次查看本地歷史,即可看到分支master與origin/master已經同時指向了新的提交。
    在這裏插入圖片描述在這裏插入圖片描述
  • 此時當我們通過命令:git checkout origin/master切換到origin/master分支時,會看到一段提示:當前處於detached HEAD狀態,你可以在這個狀態下繼續提交,但是當你切換到別的分支的時候你在detached HEAD狀態下的這些提交就比較難尋回了,這是由於我們的HEAD應用無法指向origin/master引用(這就是遠程跟蹤分支用戶只讀的另一意思)
    在這裏插入圖片描述

4、如何獲取遠程倉庫最新提交

  • 加上別人給遠程倉庫test01新添加了一個C4,此時遠程倉庫的分支master就指向這個最新的提交C4。通過命令:git fetch獲取遠程倉庫最新提交C4,此時本地倉庫origin/master比分支master前進了一個提交(即:origin/master已經指向了最新提交C4)
    在這裏插入圖片描述
  • 通過命令:git merge origin/master將新的提交合並單本地的分支master上,此時分支master指向C4。(這裏我們可能講解時比較順利,時間本地可能還有別的提交,可能還會報衝突,此時需要我們解決衝突後才能合併)
    在這裏插入圖片描述
  • 實戰講解:在github遠程倉庫中手動修改001.txt文件(此處是新增了一行333333),通過命令:git fetch origin獲取遠程最新提交,通過命令:git merge origin/master將新的提交合併到本地的分支master上
    在這裏插入圖片描述在這裏插入圖片描述
  • 通過命令:git pull origin命令也可獲取遠程最新提交,但是在獲取後會自動合併到本地的分支master上。即git pull相當於git fetch + git merger這兩個操作。一般建議是用git fetch和git merger。因爲我們再進行git fetch後可以看到跟蹤分支與遠程跟蹤分支的一個差異。
    在這裏插入圖片描述在這裏插入圖片描述

5、參考文檔

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