- 基礎配置和信息查詢 (Setup and Information)
git config --global user.name “Your Name”: 配置全局用戶名,用于 Git 提交記錄。
git config --global user.email “your.email@example.com”: 配置全局用戶郵箱,同樣用于 Git 提交記錄。
git config --list: 列出當前的 Git 配置信息(包括全局、倉庫級別等)。
git init: 在當前目錄下初始化一個新的 Git 倉庫 (repository)。
git status: 查看工作目錄 (working directory) 和暫存區 (staging area) 的狀態。顯示哪些文件被修改了、哪些文件被暫存了、哪些文件未被 Git 跟蹤等。
git help : 獲取 Git 命令的幫助文檔,例如 git help commit。
git version: 查看 Git 版本。
- 管理工作目錄和暫存區 (Working with Changes)
git add : 將指定的文件添加到暫存區。
git add .: 將當前目錄及其子目錄下的所有修改和新增的文件添加到暫存區。
git add -u: 只將工作目錄中 已跟蹤 (tracked) 的文件的修改添加到暫存區(不包括新增的文件)。
git rm : 從工作目錄和暫存區中刪除指定的文件。
git rm --cached : 只從暫存區中刪除文件,保留工作目錄中的文件 (常用于停止跟蹤某個文件,但不刪除本地文件)。
git mv <old_file> <new_file>: 重命名或移動文件,并將其添加到暫存區。
git diff: 查看工作目錄中 未暫存 (unstaged) 的修改內容。
git diff --staged: 查看暫存區中 已暫存 (staged) 的修改內容。
git diff : 比較兩個分支之間的差異。
git restore : 撤銷對工作目錄中指定文件的修改,使其恢復到最近一次提交 (commit) 的狀態 (未暫存的修改)。
git restore --staged : 將指定文件從暫存區移除,但保留工作目錄中的修改 (取消暫存)。
git clean -fd: 刪除工作目錄中 未被跟蹤 (untracked) 的文件和目錄 (謹慎使用,會永久刪除未跟蹤的文件)。
- 提交歷史 (Commit History)
git commit -m “Your commit message”: 提交暫存區中的更改到本地倉庫,并添加提交信息 (commit message)。
git commit -am “Your commit message”: 相當于 git add -u 和 git commit -m 的組合,自動暫存已跟蹤文件的修改并提交。
git commit --amend: 修改最近一次的提交 (commit)。可以修改提交信息,或者將暫存區的新更改添加到上一次提交中。
git log: 查看提交歷史記錄。
git log --oneline: 以簡潔的單行格式顯示提交歷史。
git log --graph --oneline --decorate --all: 以圖形化方式顯示分支、合并關系和提交歷史 (更直觀)。
git log -p: 顯示每次提交的詳細 diff 信息。
git log --author=“Author Name”: 只顯示指定作者的提交記錄。
git log --grep=“keyword”: 只顯示提交信息中包含指定關鍵詞的提交記錄。
git show : 查看指定提交的詳細信息,包括提交信息、作者、日期和 diff 內容。
git reflog: 查看引用日志 (reference log),記錄了 HEAD 和分支引用的變化,即使提交沒有被任何分支或標簽引用,也可以通過 reflog 找到 (用于找回丟失的提交)。
- 分支管理 (Branch Management)
git branch: 列出本地分支。
git branch -r: 列出遠程分支。
git branch -a: 列出所有分支 (本地和遠程)。
git branch <new_branch_name>: 創建新的本地分支 (但不會切換到新分支)。
git checkout -b <new_branch_name> <base_branch>: 創建新的本地分支并切換到新分支,基于 <base_branch> 創建。
git checkout <branch_name>: 切換到已存在的本地分支。
git checkout -: 切換到上一個分支 (例如,從 branchA 切換到 branchB 后,再執行 git checkout - 會切換回 branchA)。
git branch -d <branch_name>: 刪除本地分支 (如果分支已合并到其他分支)。
git branch -D <branch_name>: 強制刪除本地分支 (即使分支未合并)。
git push origin --delete <branch_name>: 刪除遠程分支。
git merge <branch_name>: 將指定分支 <branch_name> 合并到當前分支。
git rebase <branch_name>: 將當前分支變基 (rebase) 到 <branch_name> 分支之上 (用于保持提交歷史的線性整潔,但有風險,謹慎使用)。
- 遠程倉庫 (Remote Repositories)
git remote add origin <remote_repository_url>: 添加遠程倉庫地址,通常命名為 origin。
git remote -v: 查看已配置的遠程倉庫地址。
git fetch origin: 從遠程倉庫 origin 獲取最新的分支和提交信息,但不會自動合并到本地分支。
git pull origin <branch_name>: 從遠程倉庫 origin 拉取指定分支 <branch_name> 的最新更改,并合并到當前本地分支 (相當于 git fetch origin <branch_name> + git merge origin/<branch_name>)。
git push origin <branch_name>: 將本地分支 <branch_name> 的提交推送到遠程倉庫 origin 的同名分支。
git push origin --all: 推送所有本地分支到遠程倉庫。
git clone <repository_url>: 克隆 (clone) 遠程倉庫到本地。
- 標簽 (Tags)
git tag: 列出本地標簽。
git tag -l ‘v1.*’: 列出匹配模式的標簽,例如列出所有以 v1. 開頭的標簽。
git tag <tag_name>: 基于當前 HEAD 提交創建一個輕量級標簽。
git tag -a <tag_name> -m “Tag message”: 創建一個附注標簽 (annotated tag),可以添加標簽信息。
git tag <tag_name> : 為指定的提交 創建標簽 (可以為歷史提交打標簽)。
git push origin <tag_name>: 推送指定的標簽到遠程倉庫。
git push origin --tags: 推送所有本地標簽到遠程倉庫。
git checkout <tag_name>: 切換到標簽 <tag_name> 所指向的提交 (會進入 “detached HEAD” 狀態)。
git tag -d <tag_name>: 刪除本地標簽。
git push origin --delete tag <tag_name>: 刪除遠程標簽。
- 儲藏 (Stashing) - 暫存未完成的更改
git stash: 儲藏當前工作目錄和暫存區的更改,回到干凈的工作狀態 (用于切換分支前保存當前工作進度,稍后恢復)。
git stash save “Your stash message”: 儲藏更改并添加描述信息。
git stash list: 列出所有儲藏的記錄。
git stash apply: 應用最近一次儲藏的更改,但儲藏記錄仍然保留在列表中。
git stash pop: 應用最近一次儲藏的更改,并從儲藏列表中刪除該記錄。
git stash apply stash@{n}: 應用指定的儲藏記錄 (例如 stash@{0} 是最近一次儲藏)。
git stash drop stash@{n}: 刪除指定的儲藏記錄。
git stash clear: 清空所有儲藏記錄。
- 子模塊 (Submodules) - 管理項目中的外部倉庫 (較為進階)
git submodule add <repository_url>
git submodule init: 初始化子模塊 (在克隆包含子模塊的項目后需要執行)。
git submodule update: 更新子模塊,檢出子模塊倉庫中子模塊配置文件指定的提交版本。
git submodule update --init --recursive: 遞歸初始化和更新子模塊 (如果子模塊還有子模塊)。
- 其他常用命令
.gitignore 文件: 在項目根目錄下創建 .gitignore 文件,用于指定 Git 忽略跟蹤的文件和目錄 (例如,編譯產生的臨時文件、日志文件、node_modules 目錄等)。
git blame : 查看文件的每一行代碼是由誰在哪個提交中修改的 (用于代碼追溯和責任歸屬)。
git bisect: 使用二分查找法快速定位引入 bug 的提交 (用于 bug 調試)。
git cherry-pick : 將指定提交 的更改應用到當前分支 (用于移植特定提交)。
git revert : 創建一個新的提交,撤銷指定提交 的更改 (用于撤銷某個提交的影響,但保留提交歷史)。
學習建議:
循序漸進: 先從最常用的命令開始學習,例如 git init, git clone, git add, git commit, git status, git log, git branch, git checkout, git merge, git pull, git push。
實踐操作: 多練習,在實際項目中使用 Git 命令,加深理解。
查閱文檔: 遇到不熟悉的命令或用法,及時查閱 Git 官方文檔或使用 git help 。
使用可視化工具: 配合 Git 可視化工具 (如 Git Graph, GitLens, SourceTree) 可以更直觀地理解 Git 的工作原理和分支關系。