Git 原理

我的bug寫的太好了發表於2018-11-15

SVN 記錄版本之間的差異

file

上述圖片中 : 橫向表示各個版本號, 縱向表示各個檔案和其差異。在version1中, 存在三個檔案各自是fileA, fileB, fileC; 在version2中, fileA, fileC發生變化A1,那我們就進行變化A1進行記錄; 在version3中, fileC發生變化A2, 那麼我們就將變化A2進行記錄, 以此類推!
Git 直接記錄快照

file

上述圖片中: 橫向表示各個版本號,縱向表示各個快照(所謂快照,即其所表示檔案的一個副本或一個複製品)。在version1中,存在三個快照各自是A、B、C;在version2中,A、C發生了變化,那麼我們就對A、C做一個快照A1、C1,而B沒有不論什麼變化,那麼就不再做快照而僅僅是做一個上次的快照做一個連結B;以此類推。

Git資料完整性
Git一般只新增資料。 Git 中所有資料在儲存前都計算校驗和。

流程原理圖
file

將遠端倉庫程式碼更新到本地
file

pull, fetch 和merge區別
file

本地工作區跟遠端倉庫衝突 (pull, fetch)
file

  1. 放棄本地修改 ( 本地倉庫覆蓋工作區 ) [ git checkout head . ]
    原理如下:
    file
  2. 原生程式碼放在暫存區, 遠端拉取, 再從暫存區取出程式碼。( 手工解決衝突 )
    原理如下:
    file
    file

分支流程

  1. 假設你正在你的專案上工作,並且已經有一些提交。

    file

  2. 你已經決定要解決的公司新的問題 #53,並建立一個分支

    file

  3. 你繼續在 #53 問題上工作,並且做了一些提交

    file

  4. 現在你接到那個電話,有個緊急問題等待你來解決 (你切回到主分支。並建立 hotfix 分支)

    file

  5. 緊急問題解決了。你打算合併分支

    file

  6. 你繼續切換到問題 #53 並做個提交

    file

  7. 問題 #53 解決了,你打算合併分支

    file
    file


    遠端拉取流程

    1. 遠端倉庫,並且有一些提交記錄 。拉取下來

    file

    1. 其他人提交了一些修改至遠端倉庫

    file

    1. 你在本地分支上繼續開發

    file

    1. 你進行拉取你本地沒有的資料

    file


    變基合併

    1. 建立了一個特性分支 server,為服務端新增了一些功能,提交了 C3 和 C4。 然後從 C3 上建立了特性分支 client,為客戶端新增了一些功能,提交了 C8 和 C9。 最後,你回到 server 分支,又提交了 C10。

    file

    1. 假設你希望將 client 中的修改合併到主分支併發布,但暫時並不想合併 server 中的修改

    $ git rebase --onto master server client

    file

    1. 進行合併 client 分支

      $ git checkout master
      $ git merge client

      file

    2. 進行合併 server 分支

    $ git rebase master server
    file

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章