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
-
手動合併衝突
-
開啟有衝突的檔案,檔案內有衝突的部分會以下述形式分隔開來
<<<<<<<<<<<<<< 當前分支的程式碼 ============== 合併過來的程式碼 >>>>>>>>>>>>>>
-
重新新增並提交
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 即可