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 du@qq.com # 設置用戶郵箱
    
  • 系統用戶級別僅在當前登錄的操作系統用戶有效

    git config --global user.name tom
    git config --global user.email du@qq.com
    

僅僅加了一個 --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 即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM