git命令詳解與使用指南

好的,這是一份非常全面的 Git 命令指南,涵蓋了從入門到進(jìn)階的常用命令,并對每條命令的作用進(jìn)行了詳細(xì)解釋。

Git 命令核心概念

在開始之前,理解 Git 的三個主要工作區(qū)域至關(guān)重要:

  1. 工作目錄 (Working Directory):你正在查看和編輯的本地文件。
  2. 暫存區(qū) (Staging Area / Index):一個準(zhǔn)備下次提交的文件列表。它像是購物車,你把需要的改動放進(jìn)去。
  3. 本地倉庫 (Local Repository):存儲項目元數(shù)據(jù)和對象數(shù)據(jù)庫的地方,位于你的 .git 目錄中。HEAD 是一個指向當(dāng)前所在分支的指針。

一、 初始化和配置

這些命令通常只在開始一個新項目或配置新環(huán)境時使用一次。

命令 解釋
git init 在當(dāng)前目錄創(chuàng)建一個新的 Git 倉庫。這會創(chuàng)建一個 .git 子目錄,其中包含所有必需的倉庫文件。
git clone <repo_url> 克?。ㄏ螺d)一個遠(yuǎn)程倉庫到本地。它會自動創(chuàng)建一個與遠(yuǎn)程倉庫同名的目錄,并初始化 .git 目錄,拉取所有數(shù)據(jù),并檢出默認(rèn)分支(通常是 mainmaster)的最新版本。
git config --global user.name "Your Name" 設(shè)置全局的用戶名,你在這個機(jī)器上所有的 Git 提交都會使用這個名稱。
git config --global user.email "your_email@example.com" 設(shè)置全局的郵箱地址,同樣用于所有提交。
git config --list 列出當(dāng)前所有的 Git 配置項。

二、 基礎(chǔ)工作流

這是你日常開發(fā)中使用最頻繁的命令集合。

命令 解釋
git status 查看工作目錄和暫存區(qū)的狀態(tài)。它會顯示哪些文件已被修改、哪些文件已暫存、哪些文件未被跟蹤。這是最常用的命令之一
git add <file> 將工作目錄中的文件改動添加到暫存區(qū)。準(zhǔn)備下次提交。
git add .git add -A 添加所有修改和新增的文件到暫存區(qū)(-A--all 的縮寫)。
git commit -m "Commit message" 將暫存區(qū)的內(nèi)容提交到本地倉庫,并附帶一條描述性的提交信息。-m 選項用于直接在命令行中輸入信息。
git commit -a -m "Message" -a 選項可以跳過 git add 步驟,自動將所有已跟蹤文件的修改添加到暫存區(qū)并提交。(對新文件無效)。
git log 顯示當(dāng)前分支的提交歷史。按 q 鍵退出。
git log --oneline 以簡潔的單行形式顯示提交歷史。
git diff 顯示工作目錄暫存區(qū)之間的差異(即,你修改了但還沒 git add 的內(nèi)容)。
git diff --staged 顯示暫存區(qū)最后一次提交之間的差異(即,你已經(jīng) git add 了但還沒提交的內(nèi)容)。

三、 分支與合并

分支是 Git 的核心功能,用于并行開發(fā)。

命令 解釋
git branch 列出所有本地分支。當(dāng)前分支會用 * 標(biāo)出。
git branch <branch_name> 創(chuàng)建一個新分支,但不會自動切換到該分支。
git checkout <branch_name> 切換到指定的分支。
git switch <branch_name> (較新版本 Git) 一個更直觀的切換分支的命令,專門用于切換,避免 checkout 的多重職責(zé)帶來的混淆。
git checkout -b <branch_name> 創(chuàng)建并立即切換到新分支。這是非常常用的組合命令。
git switch -c <branch_name> (較新版本 Git) git checkout -b 的替代命令,創(chuàng)建并切換。
git merge <branch_name> 將指定分支的更改合并到當(dāng)前分支。通常用于合并特性分支到主分支。
git branch -d <branch_name> 刪除指定的分支(如果該分支已被合并)。
git branch -D <branch_name> 強(qiáng)制刪除分支,即使它還沒有被合并。慎用。
git log --graph --oneline 以圖形化方式顯示分支和合并歷史,非常直觀。

四、 撤銷與回退

當(dāng)你犯錯時,這些命令是你的救命稻草。

命令 解釋
git restore <file> (較新版本 Git) 丟棄工作目錄中指定文件的修改,將其恢復(fù)到最后一次提交的狀態(tài)(或暫存區(qū)的狀態(tài),如果已暫存)。
git restore --staged <file> (較新版本 Git) 將文件從暫存區(qū)移回工作目錄,即取消 git add 操作。文件內(nèi)容保持不變。
git reset --hard HEAD 危險命令。將工作目錄和暫存區(qū)都重置到最近一次提交(HEAD)的狀態(tài),丟棄所有未提交的修改。
git reset --hard <commit_hash> 危險命令。重置到指定的某次提交,丟棄該提交之后的所有提交和修改。<commit_hash> 可以從 git log 中獲取。
git revert <commit_hash> 安全撤銷。創(chuàng)建一個新的提交,該提交的內(nèi)容與指定提交的修改相反,從而“撤銷”那次提交的更改。這是公共分支(如 main)上推薦的撤銷方法,因為它不會重寫歷史。

五、 遠(yuǎn)程協(xié)作

與團(tuán)隊其他成員共享代碼。

命令 解釋
git remote -v 查看已配置的遠(yuǎn)程倉庫及其 URL。-v 顯示詳細(xì)信息。
git remote add <name> <url> 添加一個新的遠(yuǎn)程倉庫,并為其起一個簡稱(如 origin)。
git fetch <remote> 從遠(yuǎn)程倉庫下載所有新的分支和數(shù)據(jù)到你的本地倉庫,但不會自動合并到你的工作文件中。這是一個安全的操作。
git pull <remote> <branch> git fetch + git merge 的組合。從遠(yuǎn)程倉庫拉取指定分支的最新更改,并立即合并到當(dāng)前本地分支。
git push <remote> <branch> 將本地分支的提交上傳到遠(yuǎn)程倉庫。
git push -u <remote> <branch> 第一次推送分支時使用 -u (或 --set-upstream) 選項,它會建立本地分支與遠(yuǎn)程分支的跟蹤關(guān)系,之后可以直接使用 git push。
git branch -r 查看所有遠(yuǎn)程分支。
git branch -a 查看所有本地和遠(yuǎn)程分支。

六、 高級與實用命令

命令 解釋
git stash 將當(dāng)前工作目錄和暫存區(qū)的修改臨時保存起來,讓你有一個干凈的工作區(qū)去處理其他事情(如切換分支)。修改被保存在一個“堆?!敝?。
git stash pop 應(yīng)用最近一次儲藏(stash)的修改,并將其從儲藏堆棧中移除。
git stash list 列出所有儲藏條目。
git tag <tag_name> 為當(dāng)前提交創(chuàng)建一個輕量級標(biāo)簽(通常用于版本發(fā)布,如 v1.0.0)。
git tag -a <tag_name> -m "Message" 創(chuàng)建一個帶注解的標(biāo)簽,包含更多信息。
git push <remote> --tags 將所有本地標(biāo)簽推送到遠(yuǎn)程倉庫。
.gitignore (這是一個文件,不是命令) 創(chuàng)建一個名為 .gitignore 的文件,在其中列出你希望 Git 忽略的文件和目錄模式(如 log/, *.tmp, node_modules/)。

總結(jié)工作流示例

一個典型的日常 Git 工作流如下:

# 1. 開始新功能前,確保在主分支上是最新的
git switch main
git pull origin main

# 2. 為新功能創(chuàng)建一個分支
git switch -c feature/awesome-new-feature

# ...(編寫代碼,修改文件)...

# 3. 檢查修改了哪些文件
git status

# 4. 查看具體修改了什么內(nèi)容
git diff

# 5. 將改動添加到暫存區(qū)
git add .

# 6. 提交到本地倉庫
git commit -m "Implement the awesome new feature"

# 7. 推送到遠(yuǎn)程倉庫(首次推送需要 -u)
git push -u origin feature/awesome-new-feature

# (然后在 GitHub/GitLab 上創(chuàng)建 Pull/Merge Request)

# 8. 功能合并后,回到主分支并拉取最新代碼
git switch main
git pull origin main

# 9. 刪除已合并的本地特性分支
git branch -d feature/awesome-new-feature

好的,在之前的基礎(chǔ)上,我再補(bǔ)充一些更高級和實用的 Git 命令,這些命令在日常開發(fā)和問題排查中非常有用。


七、 歷史查看與比較進(jìn)階

這些命令幫助你更精細(xì)地查看項目歷史和分析改動。

命令 解釋
git log -p 顯示提交歷史的補(bǔ)丁(diff)信息,可以看到每次提交具體修改了哪些內(nèi)容。
git log --stat 顯示提交歷史的簡要統(tǒng)計信息,包括哪些文件被修改,以及添加/刪除了多少行。
git log --oneline --graph --all 以圖形化方式顯示所有分支的提交歷史,讓你對整個倉庫的結(jié)構(gòu)一目了然。
git show <commit_hash> 顯示某次特定提交的詳細(xì)信息,包括提交元數(shù)據(jù)和內(nèi)容差異。
git blame <file> 逐行顯示指定文件,并標(biāo)注每一行最后是由誰在哪個提交中修改的。用于追溯代碼來源。
git diff <commit1> <commit2> 比較兩次提交之間的差異。
git diff <branch1>..<branch2> 比較兩個分支最新提交之間的差異。
git diff <branch1>...<branch2> 比較兩個分支從共同祖先分叉點(diǎn)開始的差異,這在查看 Pull Request 的改動時特別有用。
git shortlog 匯總提交日志,按作者分組顯示提交信息,用于生成貢獻(xiàn)者列表。

八、 提交歷史重寫(謹(jǐn)慎使用)

這些命令會修改提交歷史,主要用于在推送前整理本地提交。對已推送到公共倉庫的提交使用這些命令是極其危險的,因為它會強(qiáng)制其他人解決沖突。

命令 解釋
git commit --amend 修改最后一次提交。它可以讓你:1) 將新的更改追加到上次提交;2) 修改上次提交的提交信息。
git rebase -i <base_branch> 交互式變基。這是一個非常強(qiáng)大的工具,可以:
- 重新排序提交
- 將多個提交壓縮(squash) 成一個
- 編輯某個提交的內(nèi)容
- 刪除提交
- 拆分提交
常用于在合并到主分支前清理自己的分支歷史。
git rebase <base_branch> 變基。將當(dāng)前分支的提交“移植”到目標(biāo)分支(如 main)的最新提交之后,從而形成一條線性的歷史。與 merge 不同,它不會產(chǎn)生合并提交。

九、 問題排查與調(diào)試

命令 解釋
git bisect start 啟動一個二分查找過程,用于快速定位引入 bug 的提交。你需要告訴 Git 一個“好”的提交(沒有 bug)和一個“壞”的提交(有 bug),Git 會自動在中間切換,讓你測試,直到找到第一個引入 bug 的提交。
git bisect good <commit> 標(biāo)記當(dāng)前提交為“好”。
git bisect bad <commit> 標(biāo)記當(dāng)前提交為“壞”。
git bisect reset 結(jié)束二分查找,回到開始前的狀態(tài)。
git reflog 救命命令。顯示 HEAD 和分支引用的移動歷史(包括被 resetrebase 刪除的提交)。如果你不小心誤操作丟失了提交,可以通過 reflog 找到提交哈希并恢復(fù)它。

十、 子模塊與工作樹

用于管理復(fù)雜項目結(jié)構(gòu)。

命令 解釋
git submodule add <repo_url> <path> 將一個 Git 倉庫作為子模塊添加到當(dāng)前項目中。
git submodule update --init --recursive 克隆主項目后,初始化并更新所有子模塊。
git worktree add <path> <branch> 為同一個倉庫創(chuàng)建另一個鏈接的工作目錄。允許你同時在多個分支上工作,而無需來回切換。非常適合同時處理一個項目的多個功能或修復(fù)。

十一、 配置與別名

讓 Git 更符合你的使用習(xí)慣。

命令 解釋
git config --global alias.<alias> <command> 為 Git 命令創(chuàng)建別名,簡化輸入。
例如:
git config --global alias.co checkout -> 之后可以用 git co
git config --global alias.l "log --oneline --graph --all" -> 之后可以用 git l
git config --global core.editor "code --wait" 設(shè)置 VS Code 作為 Git 的默認(rèn)文本編輯器(用于提交信息等)。

十二、 文件操作

命令 解釋
git rm <file> 從工作目錄和 Git 倉庫中刪除文件,并暫存這個刪除操作。
git rm --cached <file> 僅從 Git 倉庫的暫存區(qū)中刪除文件(取消跟蹤),但保留在工作目錄中。常用于當(dāng)你忘記將文件添加到 .gitignore 時。
git mv <old_file> <new_file> 移動或重命名文件,并暫存這個操作。Git 能更好地跟蹤文件的歷史。

高級工作流示例

1. 使用 git commit --amend

# 提交后發(fā)現(xiàn)漏了一個文件,或者提交信息寫錯了
git add forgotten_file.txt
git commit --amend -m "New corrected commit message"
# 這會替換上一次的提交,不會產(chǎn)生新的提交記錄

2. 使用 git rebase -i 壓縮提交:

# 假設(shè)你最近有3次提交,想合并成1個清晰的提交
git rebase -i HEAD~3
# 在打開的編輯器中,將后兩次提交前面的 'pick' 改為 'squash' 或 's'
# 保存退出后,Git會讓你編輯合并后的新提交信息

3. 使用 reflog 恢復(fù)誤刪的提交:

# 不小心用 `git reset --hard` 刪除了一個提交
git reflog
# 找到刪除前的那個提交的哈希值(例如 abc123f)
git reset --hard abc123f
# 你的提交就恢復(fù)了!

掌握這些補(bǔ)充命令將使你從一個 Git 基礎(chǔ)用戶升級為一個高效、能處理復(fù)雜場景的 Git 高手。記住,涉及重寫歷史的命令在共享分支上要格外小心!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容