git的跟蹤分支和遠端跟蹤分支學習筆記

Johnny丶me發表於2018-03-22

概念區分

  • 分支(branch):是指向某個commit物件的引用
  • 跟蹤分支(tracking branch):本地的分支,比如master分支,使用者可寫
  • 遠端跟蹤分支(remote tracking branch):遠端的分支origin/master, 使用者只讀

通過git clone操作來了解倉庫同步的過程

  • 克隆前【遠端倉庫】的狀態:遠端倉庫master分支指向c2的commit
    這裡寫圖片描述

  • 將資料克隆到本地之後:

    • 首先會生成一個origin/master的引用指向最新的提交c2,這個orgin/master 就是遠端跟蹤分支,使用者只讀。
      這裡寫圖片描述
    • 然後根據origin/master 生成一個master分支指向同一個提交c2, 如下:
      這裡寫圖片描述

通過git push操作來了解倉庫同步的過程

  • 專案克隆之後,修改本地檔案並提交,此時master分支的head處於c3的位置【git push前的一個狀態】
    這裡寫圖片描述

  • 通過git push 命令會對遠端和本地都作出修改

    • 修改遠端的master指向至c3,如下圖所示:
      這裡寫圖片描述
    • 修改本地的origin/master分支指向c3,如下圖所示
      這裡寫圖片描述

關於checkout 的操作

  • 通過 git checkout master 會把分支切換到master分支上
  • 而當 git checkout origin/master 時,這個操作會處於‘detached Head’ 狀態,在這種狀態下不會修改origin/master上的資料,可以修改並提交做一些實驗性的操作,但是切換回master分支後,再次從master切換回origin/master時,之前的改變不會同步,因為origin/master 是使用者只讀的

通過git fetch origin獲取資料

  • 在fetch之前,遠端處於c4,本地處於c3
    這裡寫圖片描述

  • fetch之後,本地的origin/master分支指向了最新的c4
    這裡寫圖片描述

  • 對比修改的地方:git diff master origin/master

通過git merge origin/master合併本地分支

  • 備註:可以merge的前提是在無衝突的狀態下,有衝突要手動解決
  • merge之後,master分支指向c4, 如下圖:
    這裡寫圖片描述

通過git pull獲取同步最新資料

  • 備註:前提是沒有衝突,有衝突手動解決
  • git pull 之前的狀態:遠端在c4, 本地在c3
    這裡寫圖片描述
  • git pull 之後的狀態:本地倉庫更新了origin/master,將其指向c4; 然後更新master分支, 將其指向c4
    這裡寫圖片描述
  • git pull = git fetch + git merge
  • git pull –rebase = git fetch + git rebase

更新版本建議的操作

  • git fetch + git merge
  • git fetch + git rebase
  • git pull –rebase

相關文章