1. 程式人生 > 其它 >Git的基本原理和簡單使用

Git的基本原理和簡單使用

一、Git原理

1. Git採用的是全量儲存方案

​ 所謂全量方案,就是每個版本都儲存所有的資料(多是程式碼,檔案佔據空間較小)。優點:快速;缺點:浪費空間。

​ 與此相對的是增量方案:儲存的是上一個版本 + 補丁。優點:節省空間;缺點:要進行運算,費時。

2. 檔案變動資訊的儲存

​ git把每次檔案的改動都存在專案根目錄下的.git資料夾中。

3. .git資料夾中的檔案

  • 利用雜湊演算法SHA-1計算得到檔案的雜湊值,依據此雜湊值來判斷檔案內容是否有改變。

    注:由於雜湊值是唯一的(幾乎不會重複),所以可以保證同一個檔案只儲存一份。

  • 使用 tree 結構來儲存

    檔案是葉節點,資料夾是非葉節點

4. 暫存區(index檔案)

5. 快照連結串列

HEAD 指標指向最新的快照。

​ 想恢復某個版本,就把指標指向那個版本,然後使用 checkout 命令;或者直接 checkout 那個版本的雜湊值。

6. 協同和分支

​ 專案需要多人分別開發時(假設兩人開發),可以在 master 主分支進行 checkout 操作,分出兩個分支,每個人在自己的分支進行開發工作,開發完成後進行合併操作。有兩種合併方式:

  • merge:合併時,兩個分支和這兩個分支的公共祖先進行三方合併。

  • rebase:將A分支儲存到一個臨時目錄下,然後撤銷此分支上所有commit,再將B分支的commit接到這條分支上(此時兩個分支基本一致),最後再將臨時目錄下儲存的內容接到這條分支後。若此時刪掉B分支,則此時就只有一條包含所有功能的分支

    注:rebase會修改提交記錄

二、Git命令

1. 本地庫初始化

在專案的根目錄進行操作

git init
# 注意:生成的 .git 目錄中存放的是本地庫相關檔案,不要刪除

2. 設定簽名

簽名的作用是區分不同操者身份。使用者資訊在每一個版本提交中能夠看到,以此確認本次提交是誰做的。

  • 專案(倉庫)級別僅在當前本地庫有效

    git config user.name tom  # 設定使用者名稱tom
    git config user.email [email protected] # 設定使用者郵箱
    
  • 系統使用者級別僅在當前登入的作業系統使用者有效

    git config --global user.name tom
    git config --global user.email [email protected]
    

僅僅加了一個 --global

優先級別:專案級別 > 系統級別

資訊儲存位置:~/.gitconfig 檔案,即C盤下的使用者目錄

3. 新增檔案(到暫存區)

git add fileName  # 指定檔案
git add . # 所有

# 將工作區的檔案新增到暫存區

4. 檢視狀態

git status   
# 檢視工作區、暫存區狀態

5. 提交(到本地庫)

git commit -m 'commit message' 
# 將暫存區內容提交到本地庫

6. 建立分支

git branch dev_dxx 
# 建立名稱為dev_dxx的分支

7. 切換分支

git checkout dev_dxx
# 切換到dev_dxx分支

8. 檢視分支

git branch -v

9. 合併分支

git branch dev_aaa
git checkout dev_aaa # 新建一個分支並切換過來
# ...  對檔案進行更改


# 合併分支的時候要明確誰誰合併
git checkout master # 回到master分支進行merge
git merge dev_dxx # 先合併dev_dxx,不會有衝突,因為此分支相當於是對master進行後續操作
git merge dev_aaa # 再合併dev_aaa,若修改過同一個檔案,則此時會有衝突conflict

10. 解決merge衝突

  • 放棄合併

    git merge --abort
    
  • 手動合併衝突

    1. 開啟有衝突的檔案,檔案內有衝突的部分會以下述形式分隔開來

      <<<<<<<<<<<<<<
       當前分支的程式碼
      ==============
       合併過來的程式碼
      >>>>>>>>>>>>>>
      
    2. 重新新增並提交

      git add fileName
      git commit -m 'merged' 
      

11. 檢視日誌

git log # 檢視所有的版本記錄

git reflog # 可以檢視所有分支的所有操作記錄(包括已經被刪除的 commit 記錄和 reset 的操作)

三、Git結合Github

1. 建立遠端倉庫

在 Github 上新建遠端倉庫

2. 新增遠端版本庫

git remote add 別名 遠端地址 
# 例子:git remote add origin https://github.com/Du-xx/gitTest.git

3. 檢視遠端地址別名

git remote -v

4. 推送 push

git push 別名 分支名
git push -u 別名 分支名    # -u指定預設主機
# 例子:git push origin master

5. 克隆 clone

將遠端倉庫的專案克隆到本地,clone進行一次從無到有的過程,更新用 pull

git clone  遠端地址
# 例子:git clone https://github.com/Du-xx/gitTest.git

6. 拉取 pull

本地已經存在 clone 下來的檔案,用 pull 進行更新

# pull = fetch + merge
git fetch 別名 分支名
git merge 別名 分支名
# 等價於
git pull 別名 分支名
# 例子:git pull origin master

7. 刪除git與github的聯絡

git remote remove origin # origin是本倉庫在github上的別名

8. fork

用於團隊外協作,其他人員使用 fork 將程式碼拉到自己的遠端倉庫中,可以直接進行更改,也可以 pull 到本地更改後 push 到遠端倉庫,之後進行 pull request,等待原有團隊稽核後 merge 即可