? ? ? ? 本文對開發中git的常用概念和操作做一個總結。參考@綠毛鴨子的部分內容。
git分布式的體現
1.本地完整的版本庫:?
每個克隆下來的 Git 倉庫都包含了項目的所有歷史記錄、提交、分支等信息。這意味著每個開發者的本地倉庫是一個完整的版本控制系統,包括了整個項目的歷史,不僅僅是當前的工作副本。即使不連接到中央服務器,開發者依然可以執行幾乎所有的 Git 操作(如提交、分支切換、查看歷史等)。
2.無需依賴中央服務器:
在 Git 中,每個開發者的本地倉庫就是一個完整的版本控制數據庫,因此不需要連接到中央服務器就能進行大多數操作(例如提交、查看歷史)。
3.離線工作、分布式協作:
?提交、查看歷史記錄、創建分支、合并等操作都可以在本地進行,直到需要同步到遠程倉庫時才進行網絡操作。團隊成員之間并不是直接依賴中心服務器進行協作,而是通過推送(push)和拉取(pull)操作,將本地倉庫的更改同步到其他開發者的倉庫中。開發者可以將自己的工作分享到遠程倉庫,其他人可以從該倉庫拉取并合并更改,整個過程不需要中央服務器一直保持在線。
常用命令
git init
git init
在當前目錄下創建一個新的Git倉庫。
git status
git status
顯示當前 Git 倉庫的工作狀態。
作用
- 顯示當前分支:它會告訴你當前所在的分支名稱。
- 顯示文件更改狀態:
- Untracked files:顯示那些未被 Git 跟蹤的新文件。
- Changes not staged for commit:顯示已經修改過但尚未添加到暫存區的文件。
- Changes to be committed:顯示已被添加到暫存區,等待提交的文件。
git add
git add <file>
git add用于將文件的更改添加到暫存區。暫存區是一個中間區域,用于準備提交(commit)之前,標記哪些文件或文件的哪些更改將被包括在下次提交中。這個命令不會直接修改 Git 倉庫的歷史記錄,它只是告訴 Git 哪些更改是你想要在下次提交中包括的。
-
添加單個文件:
git add <file>
這將把指定文件添加到暫存區,標記為已修改并準備好提交。
示例:
git add index.html
-
添加多個文件:
git add <file1> <file2> ...
可以一次性將多個文件添加到暫存區。
示例:
git add file1.txt file2.txt
-
添加所有文件:
git add .
這個命令會將當前目錄下的所有更改(包括新增文件、修改的文件以及刪除的文件)添加到暫存區。如果你想添加所有更改的文件,可以使用這個命令。
-
添加所有更改的文件(包括刪除的文件):
git add -A
使用
-A
參數,Git 會將所有更改的文件(包括新添加的文件、修改的文件以及刪除的文件)都添加到暫存區。(整個工作區) -
添加指定模式的文件:
git add "*.txt"
使用通配符可以添加符合特定模式的文件。例如,
git add "*.txt"
會將所有.txt
文件添加到暫存區。 -
添加部分文件的更改:
git add -p
-p
(patch)參數可以讓你選擇性地將某些修改的部分添加到暫存區,而不是整個文件。在運行?git add -p
?命令后,Git 會逐個顯示每個文件的修改塊,并提示用戶選擇是否將該塊添加到暫存區。git commit
?用于將暫存區的更改(也就是已經通過 git add
命令添加到暫存區的文件)記錄到本地倉庫中的命令。每次執行 git commit
時,都會生成一個新的提交對象,并為這個提交生成一個唯一的提交哈希值。每個提交還會有一個描述性的消息,通常用來描述本次更改的內容。
主要參數:
-
-m
或--message
:- 用于指定提交信息。提交信息是對本次修改的簡短描述,幫助其他人(或者自己)理解這次更改的目的。
- 例如:
git commit -m "Fix bug in login feature"
-
--amend
:- 如果你想修改最近一次的提交,可以使用?
--amend
?參數。這會將最新的提交修改為當前暫存區的內容。 - 如果你忘記添加文件或者提交信息有誤,可以通過?
git commit --amend
?來修正。 - 注意:
--amend
?會修改歷史提交,可能會影響其他依賴該提交的工作,因此要小心使用。
例如:
git commit --amend -m "Updated commit message"
- 如果你想修改最近一次的提交,可以使用?
-
--no-edit
:- 這個選項與?
--amend
?一起使用,表示不修改提交信息,僅修改提交的內容。 - 例如:
git commit --amend --no-edit
- 這個選項與?
-
--date="date"
:- 用于指定提交的時間戳。例如:
git commit --date="2025-04-20 12:00:00" -m "Custom date for commit"
- 用于指定提交的時間戳。例如:
-
-a
或--all
:- 在執行?
git commit
?時,自動將所有已跟蹤文件的修改直接提交到版本庫,而不需要使用?git add
。 - 但是不會包括新文件(未跟蹤的文件)。例如:
git commit -a -m "Commit all tracked changes"
- 在執行?
-
--author="name <email>"
:- 用于指定提交的作者。如果你希望指定不同于當前配置的作者,可以使用此選項。
- 例如:
git commit --author="John Doe <john@example.com>" -m "Custom author commit"
git三大區域
Workspace:工作區,就是你平時存放項目代碼的地方;
Index / Stage:暫存區,用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息,一般存放在 .git 目錄下的 index 文件(.git/index)中,所以我們把暫存區有時也叫作索引(index);
Repository:倉庫區(或本地倉庫),就是安全存放數據的位置,這里面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本;
Remote:遠程倉庫,托管代碼的服務器,可以簡單的認為是你項目組中的一臺電腦用于遠程數據交換;?
git 回滾
git HEAD
1.HEAD 是指向當前所在分支的最新提交的指針。當你切換分支時,HEAD 會隨之移動,指向新分支的最新提交。
2.分離 HEAD(Detached HEAD):
- 當 HEAD 不指向任何分支,而是指向某個具體的提交時,稱為“分離的 HEAD”狀態。這通常發生在你使用?
git checkout <commit>
?或?git checkout <commit_hash>
?時。 - 在這種狀態下,如果你進行提交,Git 不會將新的提交與任何分支關聯,而是創建一個孤立的提交。你可以在這種狀態下進行實驗性的修改,但如果不創建新的分支來保存這些提交,它們最終可能會丟失。
git log
- 查看提交歷史:
這個命令會顯示從最近的提交開始,按時間倒序列出所有提交記錄,包括提交的哈希值、作者、提交日期和提交信息。git log
-
簡潔輸出: 如果只想看到提交的簡潔信息(如提交哈希和提交信息),可以使用
--oneline
選項:git log --oneline
這會顯示每個提交的一行簡潔信息,通常會看到提交的簡短哈希值和提交信息。
-
顯示具體的文件變更: 如果你想查看每次提交時修改了哪些文件,可以使用
--stat
選項:git log --stat
這個命令會顯示每個提交的文件變更統計信息(例如,修改了多少行代碼等)。
git reflog?
git reflog記錄了 HEAD 和分支引用的歷史變動。
git log
:記錄的是 Git 倉庫的提交歷史,即所有的 commit 對象。它顯示的是你倉庫的版本歷史(從當前 HEAD 開始),包括所有的提交、作者、日期、提交信息等。git reflog
:記錄的是 Git 倉庫中引用的變動歷史,即 HEAD 或分支引用(例如?master
?或?develop
)的移動。它不僅記錄提交,還記錄如?git checkout
、git reset
、git merge
?等操作如何影響引用的位置。git reflog
?能幫助你追蹤本地分支的變動歷史,包括那些不再出現在提交歷史中的變動。
回滾
回滾至之前版本
git log
git reset --hard 版本號
回滾至之后版本
git reflog
git reset --hard 版本號
?