Skip to content

Git 命令 详解

你真正会用到的 Git 命令,按用途分组:初始化仓库、保存快照、分支与合并、查看历史、与远程协作、撤销误操作、暂存到 stash,以及管理文件和子模块。每行将命令与一个贴近实际的调用示例配对。

Git 有数百个命令,但日常工作只需要少数几个。心智模型是:工作区是你的文件,索引(暂存区)是下一次提交,HEAD 是当前提交。暂存、提交、共享。经常查看 status。下面所有内容都假设列出的命令已经存在。

参考表格 · 55 条目
55 of 55 rows
初始化与配置
一次性为所有仓库设置你的姓名、邮箱或编辑器。git config --global user.name "Ada"
为常用命令定义一个快捷名称。git config --global alias.co checkout
在当前文件夹创建一个新仓库。git init
把远程仓库复制到你的机器上。git clone git@github.com:org/repo.git
只复制单个分支的最新若干提交。git clone --depth 1 --single-branch git@github.com:org/repo.git
快照基础
显示哪些已暂存、已修改、未跟踪。git status -sb
暂存更改,使其进入下一次提交。git add src/app.ts
逐块审查更改,只暂存你接受的部分。git add -p src/app.ts
暂存所有已跟踪文件的更改,不添加新文件。git add -u
把已暂存的更改记录为一个新提交。git commit -m "fix: null check"
用修正后的提交替换最后一次提交。git commit --amend -m "fix: handle empty input"
显示未暂存的更改,加 --staged 显示已暂存的更改。git diff --staged
显示自上次提交以来的全部更改,无论是否已暂存。git diff HEAD
分支与合并
列出、创建或删除分支。git branch feature-x
删除已合并分支(-D 强制删除,-a 列出所有分支)。git branch -d feature-x
切换分支(checkout 的现代替代)。git switch feature-x
一步创建新分支并切换过去。git switch -c feature-x
切换分支或恢复文件(较老、范围更广的命令)。git checkout feature-x
把另一分支的更改并入当前分支。git merge feature-x
取消产生冲突的合并,把分支恢复到之前的状态。git merge --abort
把当前分支的提交重放到另一分支之上。git rebase main
在重放时压缩、重排或编辑提交。git rebase -i main
把另一分支的单个提交复制到当前分支。git cherry-pick a1b2c3d
给提交打上一个可读标签,比如版本号。git tag -a v1.2.0
同时在单独文件夹中检出另一分支。git worktree add ../repo-feature feature-x
查看历史
遍历提交历史。git log --oneline --graph --decorate
遍历所有分支的历史,而不只是当前分支。git log --oneline --graph --all
显示某个提交的完整 diff 和提交信息。git show HEAD
显示文件每一行最后由谁修改。git blame src/app.ts
显示 HEAD 指向过的所有提交,包括已丢弃的。git reflog
对历史二分查找,定位引入问题的提交。git bisect start
按作者汇总提交。git shortlog -sn
从最近的标签计数,为当前提交命名。git describe --tags
远程协作
列出或添加远程仓库。git remote add origin <url>
列出远程及其 fetch 和 push URL。git remote -v
下载远程更改,不改动你的分支。git fetch origin
下载远程更改并清除已删除远程分支的引用。git fetch --prune
拉取并合并当前分支的远程更改。git pull --rebase
把本地提交推送到远程。git push -u origin feature-x
覆盖远程分支,但仅当没有别人先推送时。git push --force-with-lease origin feature-x
撤销更改
丢弃工作区更改,或取消暂存。git restore src/app.ts
取消文件的暂存,编辑保留在工作区。git restore --staged src/app.ts
移动当前分支指针,可选地同时移动索引。git reset --hard HEAD~1
新增一个撤销早前提交的提交(可安全共享)。git revert HEAD
删除未跟踪的文件和文件夹。git clean -fd
贮藏(stash)
保存未提交的工作并重置工作区。git stash -u
显示你保存的所有贮藏。git stash list
重新应用贮藏并保留它。git stash apply stash@{1}
删除不再需要的贮藏。git stash drop stash@{1}
重新应用最近的贮藏并删除它。git stash pop
文件与子模块
移动或重命名文件并暂存该更改。git mv old.ts src/new.ts
删除文件并暂存删除操作。git rm src/old.ts
把另一个仓库作为文件夹纳入本仓库跟踪。git submodule add git@github.com:org/lib.git lib
从大仓库中只检出你指定的文件夹。git sparse-checkout set src docs
把某次提交的树导出为 tar 或 zip 文件。git archive -o repo.zip HEAD