一、git的基本使用流程
?
git clone
克隆遠程資源到本地目錄,作為工作目錄;- 然后在本地的克隆目錄上添加或修改文件;
- 如果遠程修改了,需要同步遠程的內容,直接
git pull
就可以更新本地的文件; - 本地在修改之后,可以通過
git status
查看修改的文件。然后使用git add
添加修改的文件暫到緩沖區; - 在添加之后,可以使用
git commit
添加到當前的工作區; - 在修改完成后,如果發現錯誤,可以撤回提交并再次修改并提交;
git push
將本地的修改推送到遠程的git服務器。
二、Git對象實現原理
????????在git中以存儲鍵值對(key-value)的方式來存儲文件。它允許插入任意類型的內容,并會返回一個鍵值,通過該鍵值可以在任何時候再取出該內容。git的kv中value一般有以下幾種類型blob
、tree
、commit
。
1.git add底層原理
????????簡單說就是:在調用git add后會生成一個blob對象,然后將該對象add放進進index區。
????????詳細的說:git add命令把工作目錄里的修改保存到暫存區(也就是索引)。它會為每個文件生成一個 Blob 對象(存儲文件內容的哈希值)或樹對象(記錄目錄結構),并將這些對象存于.git/objects
目錄。
????????暫存區的信息保存在.git/index
文件中,該文件會記錄文件路徑、時間戳和哈希值等。
????????每次執行git add
,都會覆蓋暫存區中對應文件之前的記錄,這樣就能分多次對同一文件進行部分更新。暫存區的作用是讓用戶可以把邏輯相關的修改組合在一起,方便后續處理。
2.git commit底層原理
????????簡單說就是:進行代碼提交時,需要根據暫存區的內容,先生成tree
對象,再生成commit
對象,然后會將記錄記錄到logs
文件夾下。
? ? ? ? 詳細的說:git commit在底層會依據暫存區的內容生成一個提交對象(Commit Object),該對象包含父提交哈希(用于鏈接歷史提交)、作者 / 提交者信息、提交信息以及指向根樹對象(Tree Object)的哈希值。
????????樹對象記錄了文件路徑、權限和 Blob 對象(存儲文件內容)的引用關系。提交對象以 SHA - 1 哈希值為標識存儲在.git/objects
目錄中。
????????提交操作會更新當前分支指針(如master
),使其指向新生成的提交哈希,同時 HEAD 指針仍指向當前分支。多次提交會形成一條通過父哈希鏈接的提交鏈。
3.git Merge和Rebase的區別使用
1.Merge
創建一個新的「合并提交」(Merge Commit),同時保留兩個分支的歷史路徑。父提交指向兩個分支的最新提交,形成一個樹形結構。
git checkout main # 切換到目標分支
git merge feature # 合并 feature 分支到 main
2.Rebase
將當前分支的提交「復制」到目標分支的末尾,形成一條線性的提交歷史。原始提交會被丟棄,生成新的提交對象(哈希值改變)。
git checkout feature # 切換到待變基的分支
git rebase main # 將 feature 分支的提交移到 main 分支末尾
????????Git 的合并工具有?Merge?和?Rebase?兩種核心方式,它們的目標都是整合分支修改,但實現路徑不同。
????????Merge?通過創建一個新的「合并提交」(Merge Commit)來整合分支,這個提交同時指向兩個分支的最新提交,形成樹形結構,完整保留分支的創建和合并歷史。
????????其優點是操作簡單、適合團隊協作,能清晰展示分支演變過程;缺點是可能使提交歷史變得復雜。
????????例如,將?feature
?分支合并到?main
?分支后,會保留兩條分支路徑及合并節點。Merge?適用于需要保留完整時間線的場景,如多人并行開發時快速集成代碼。
????????Rebase?則是將當前分支的提交「復制」到目標分支的末尾,通過丟棄原始提交并生成新的提交對象,形成一條線性的提交歷史。
????????這種方式使提交記錄更簡潔,適合個人在推送到遠程前整理本地分支,但需注意避免對已共享的遠程分支執行 rebase,以免導致團隊協作沖突。
????????例如,將?feature
?分支變基到?main
?分支后,歷史記錄會變成一條直線,隱藏分支分叉的過程。Rebase?的優勢在于生成清晰的線性歷史,便于快速瀏覽和理解代碼演進,但其本質是「歷史重寫」,操作時需格外謹慎。
4.Reset重置使用
? ? ? ? 簡單來說:git reset
?是 Git 中用于撤銷提交或移動分支指針的核心命令,其本質是通過修改分支指針的指向來改變當前工作目錄的狀態。根據不同的參數,它可以精確控制撤銷的范圍(僅修改提交歷史、重置暫存區或同時回滾工作目錄)。
? ? ? ? 詳細來說:Git 的git reset
命令用于撤銷提交或移動分支指針,通過修改分支指針的指向來改變工作目錄狀態,
????????其核心參數有三種模式:
????????--soft
僅移動分支指針,保留暫存區和工作目錄,撤銷的提交內容仍可直接提交;
????????--mixed
(默認)移動分支指針并重置暫存區,保留工作目錄,需重新git add
才能提交;
????????--hard
則徹底回滾,移動分支指針、重置暫存區并丟棄工作目錄的修改,可能導致永久丟失數據。
????????此外,--keep
模式會在回滾時自動儲藏未提交的修改,重置后可恢復。
????????git reset
適用于本地未推送的錯誤提交,但需避免對已共享的遠程分支使用,以免引發協作沖突。與git revert
不同,reset
是刪除提交記錄,而revert
是創建新提交來撤銷舊提交。
三、Android studio的Git工作區使用
????????Git管理代碼分為工作區間、暫存區和版本庫三個區域,我們在工作區間寫代碼,寫完之后需要將創建的文件或修改的代碼添加到暫存區,然后才能提交到版本庫,我們不能把工作區間的修改直接提交到版本庫。
1.工作區(Working Directory)即項目在磁盤上的實際文件,包括你正在編輯的代碼。初始狀態下,Git 不會跟蹤未添加的新文件。
2.暫存區(Staging Area)也稱為索引(Index),是一個中間區域,用于準備提交的內容。可以選擇部分文件或文件的部分內容添加到暫存區。
3.本地倉庫(Local Repository)存儲已經提交的歷史版本,包含提交對象和引用。
4.遠程倉庫(Remote Repository)托管在 GitHub、GitLab 等平臺的共享倉庫。
在 Android Studio 中使用 Git 工作區
1. 初始化 Git 倉庫
-
操作步驟:VCS → Enable Version Control Integration → 選擇 Git
-
此時項目根目錄會生成一個隱藏的
.git
文件夾
2. 添加文件到暫存區
-
操作 1:通過 Git 菜單提交
-
選擇需要提交的文件(變更列表中顯示)
-
右鍵 → Git → Commit File...
-
在彈出的對話框中,未勾選的文件僅添加到暫存區
-
# 添加單個文件到暫存區
git add app/src/main/java/com/example/MainActivity.java# 添加所有修改的文件到暫存區
git add .# 添加特定目錄下的所有文件
git add app/src/
3. 提交到本地倉庫
-
操作 2:在 Commit 對話框中
-
填寫提交信息
-
點擊 Commit 按鈕(僅提交到本地倉庫)
-
點擊 Commit and Push 可直接推送到遠程倉庫
-
4. 推送到遠程倉庫
-
操作 3:Push 操作
-
VCS → Git → Push
-
選擇遠程倉庫和分支
-
點擊 Push 按鈕
-
5. 撤銷操作
-
撤銷工作區修改:右鍵文件 → Git → Revert
-
撤銷暫存區文件:使用
git reset HEAD <file>
-
撤銷提交:使用
git revert <commit>
創建一個反向提交
四、Git總結
????????Git 是一種分布式版本控制系統,
????????其基本使用流程包括:
????????首先通過git clone
將遠程倉庫克隆到本地作為工作目錄,在本地進行文件的添加或修改;若遠程倉庫有更新,使用git pull
同步內容;
????????本地修改后,通過git status
查看狀態,使用git add
將修改添加到暫存區,再用git commit
提交到本地倉庫,若提交有誤可通過git reset
或git revert
撤回并重新提交,最后使用git push
將本地修改推送到遠程倉庫。
????????Git 以鍵值對方式存儲文件,其中值的類型有 blob、tree、commit,git add
會生成 blob 對象并存于.git/objects
目錄,暫存區信息保存在.git/index
文件中;git commit
會依據暫存區內容生成提交對象和樹對象,更新當前分支指針。
????????Git 的合并方式有 Merge 和 Rebase,Merge 通過創建新的合并提交整合分支,保留分支歷史路徑,Rebase 則將當前分支的提交復制到目標分支末尾,形成線性提交歷史。
????????git reset
用于撤銷提交,有--soft
、--mixed
、--hard
等模式。在 Android Studio 中使用 Git,可通過 VCS 菜單啟用版本控制、添加文件到暫存區、提交到本地倉庫、推送到遠程倉庫,還能通過右鍵操作撤銷工作區修改、使用命令撤銷暫存區文件或提交。