Git 基礎概念#
Git 概念彙總#
概念 | 描述 |
---|---|
工作區(Workspace) | 在本地的代碼庫,新增和修改的文件會提交到暫存區 |
暫存區(stage) | 用於臨時存放文件的修改,實際上是一個文件(. Git/index),保存待提交的文件列表 |
倉庫(repository) | Git 的管理倉庫,記錄文件狀態的地方,所有的代碼版本都在裡面 |
遠程倉庫(origin/remote) | 專用的 git 伺服器,為多人提供共享服務。本地的倉庫通過 ==push== 命令將代碼推送到遠程倉庫裡 |
本地倉庫 | 本地電腦內直接使用的版本庫 |
分支(Branch) | 分支是從主線分離出的副本,可以獨立操作而不干擾主線,倉庫初始化後會有一個默認主分支 “master” 或 “main” |
頭(HEAD) | HEAD 類似指針,指向當前活動分支的最新版本 |
提交(Commit) | 將 stage 中的所有變更提交到當前倉庫的活動分支 |
推送(Push) | 將本地倉庫的版本推送到遠程倉庫 |
拉取(Pull) | 從遠程倉庫獲取更新到本地倉庫 |
獲取(Fetch) | 從遠程倉庫更新,作用同 pull,但是不會自動合併 |
衝突(Conflict) | 多人對同一個文件進行修改後在遠程倉庫合併時會面臨衝突,需要人工合併處理 |
合併(Merge) | 對有 conflict 的文件進行合併操作,git 可以自動合併變更內容,無法自動處理的文件需要人工處理 |
標籤(Tag) | 標籤指的是某個分支某個特定時間點的狀態,可以理解為提交記錄的別名,常用來標記版本。 |
main/master | 倉庫的默認主分支 |
origin/main | 表示遠程倉庫的 main 分支 |
工作區 / 暫存區 / 倉庫#
- 圖中的 objects 標識的區域為 git 的對象庫,實際的位置是 “. Git/objects” 目錄中,裡面包含了創建的各種對象和內容
- 當對工作區的修改 / 新增文件執行 git add命令後,暫存區的目錄樹被更新,同時工作區修改 / 新增文件的內容被寫入 objects 的一個新的對象中,而該對象的 ID 被記錄在 stage 的文件索引中
- 當執行 git commit時,stage 的目錄樹寫入 objects 中,main 分支做出更新
- 當執行 git reset HEAD 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。
- 當執行 git rm --cached “file” 命令時,會直接從暫存區刪除文件,工作區則不做出改變
工作區#
本地計算機內的項目文件
暫存區(stage)#
暫存區是一個臨時存儲區域,包含即將提交到版本庫中的文件快照
常用命令
git add filename # 將單個文件添加到暫存區
git add . # 將工作區中的所有修改添加到暫存區
git status # 查看哪些文件在暫存區中
版本庫(Repository)#
版本庫包含項目的所有版本歷史記錄,每次提交都會在版本庫中創建一個新的快照,這些快照不可變,確保了項目的完整歷史記錄
常用命令
git commit -m "提交信息" # 將暫存區的更改提交到本地版本庫
git log # 查看提交歷史
git diff # 查看工作區和暫存區之間的差異
git diff --cached # 查看暫存區和最後一次提交之間的差異
三者之間的關係#
- 工作區 -> 暫存區
git add
- 暫存區 -> 版本庫
git commit -m "提交信息"
- 版本庫 -> 遠程倉庫
git push origin branch-name
- 遠程倉庫 -> 本地版本庫
git pull origin branch-name
# 或者
git fetch origin branch-name
git merge origin/branch-name
Git 工作流程#
1、克隆倉庫#
如果你要參與一個已有的項目,首先需要將遠程倉庫克隆到本地:
git clone https://github.com/username/repo.git
cd repo
2、創建新分支#
為了避免直接在 main 或 master 分支上進行開發,通常會創建一個新的分支:
git checkout -b new-feature
3、工作目錄#
在工作目錄中進行代碼編輯、添加新文件或刪除不需要的文件。
4、暫存文件#
將修改過的文件添加到暫存區,以便進行下一步的提交操作:
git add filename
或者添加所有修改的文件
git add .
5、提交更改#
將暫存區的更改提交到本地倉庫,並添加提交信息:
git commit -m "添加新功能"
連接遠程倉庫
git remote add origin [[email protected]]
6、拉取最新更改#
在推送本地更改之前,最好從遠程倉庫拉取最新的更改,以避免衝突:
git pull origin main
或者如果在新的分支上工作
git pull origin new-feature
7、推送更改#
將本地的提交推送到遠程倉庫:
git push origin new-feature
8、刪除分支#
如果不再需要新功能分支,可以將其刪除:
git branch -d new-feature
或者從遠程倉庫刪除分支:
git push origin --delete new-feature
Git 指令#
Git 分支#
Git 倉庫在 fork 中打開後界面如下:
可以看到每一個分支相互平行,只有完成某些項目的開發時才會合併到主分支。
那麼分支有什麼用呢?當計劃開發一個新的功能時,第一天完成了百分之 50,如果直接提交到 master 分支,則可能導致別人無法開發,如果全部寫完再提交的話又可能因為意外丟失之前的進度。此時就體現出分支的優越性了。我們可能創建一個屬於自己的別人不可見的分支,在這個分支上開發提交代碼不會影響他人,可以隨意操作,等到開發結束了再一次性合併到 master 分支。
Git 分支常用命令#
git branch # 列出所有本地分支
git branch -r #列出所有遠程分支
git branch -a #列出所有本地和遠程的分支
git branch [new-branch-name] #創建一個新的分支,但停留在當前分支
git checkout -b [new-branch-name] #創建一個新的分支,並切換到該分支
git branch --track [branch] [remote-branch] #創建一個新分支,並與指定的遠程分支建立追蹤關係
git checkout [new-branch-name] #切換到指定分支,並更新工作區
git merge [branch] #合併指定分支到當前分支
git branch -d [branch] #刪除分支
git push origin --delete [branch] #刪除遠程分支