Git 常用命令速查

发布于 2026-07-30 11:19 更新于 2026-08-02 00:00 3102 字 16 min read ... 访问量

本文整理了 Git 开发中常用命令,按实际工作流程分类,涵盖仓库初始化、配置、状态查看、文件操作、分支管理、合并变基、提交操作、历史追溯、标签管理及紧急恢复等核心功能。内容强调操作安全,提醒避免对共享历史进行危险修改(如 rebase、reset --hard),并推荐使用 reflog、cherry-pick、git bisect 等工具高效定位问题和管理变更。

Git 常用命令速查

本文按实际开发流程整理常见 Git 命令。示例中的 <branch><commit><file> 等内容需要替换为真实的分支名、提交哈希或文件路径。

执行修改历史或删除文件的命令前,建议先运行 git status,必要时通过 git stash -u 临时保存当前修改。

Git 工作流程

flowchart LR
    A[工作区] -->|git add| B[暂存区]
    B -->|git commit| C[本地仓库]
    C -->|git push| D[远程仓库]
    D -->|git fetch / git pull| C
    B -->|git restore --staged| A
    C -->|git restore / git reset| A
区域说明常用命令
工作区当前正在编辑的文件git diffgit restore
暂存区下一次提交准备包含的内容git addgit diff --staged
本地仓库已提交的版本历史git commitgit log
远程仓库GitHub、GitLab 等远程副本git fetchgit pullgit push

初始化与克隆仓库

初始化本地仓库

在当前目录初始化 Git 仓库

git init

初始化并指定默认分支为 main

git init -b main

克隆远程仓库

git clone https://github.com/<owner>/<repo>.git
git clone git@github.com:<owner>/<repo>.git

克隆到指定目录

git clone <repository-url> <directory>

只克隆最近一次提交,适合只需要最新代码的场景

git clone --depth 1 <repository-url>

配置 Git

设置全局用户名

git config --global user.name "Your Name"

设置全局邮箱

git config --global user.email "you@example.com"

将新仓库的默认分支设置为 main

git config --global init.defaultBranch main

查看所有配置及其来源

git config --list --show-origin

查看当前仓库生效的用户名和邮箱

git config user.name
git config user.email

去掉 --global 后,配置只对当前仓库生效。仓库级配置会覆盖全局配置。

查看仓库状态

查看工作区和暂存区状态

git status

使用精简格式显示状态和当前分支

git status -sb

暂存文件

暂存指定文件

git add <file>

暂存指定目录

git add <directory>

暂存当前目录下所有新增、修改和删除

git add .

交互式选择要暂存的代码块

git add -p

从暂存区移除文件,但保留工作区修改

git restore --staged <file>

删除文件,并将删除操作加入暂存区

git rm <file>

停止跟踪文件,但保留本地文件

git rm --cached <file>

移动或重命名文件

git mv <old-path> <new-path>

创建提交

打开编辑器填写提交说明

git commit

直接填写提交说明

git commit -m "docs: update Git command guide"

暂存所有已跟踪文件的修改并提交

# 不包含尚未被 Git 跟踪的新文件
git commit -am "fix: update tracked files"

修改最近一次提交,并重新编辑提交说明

git commit --amend

将新暂存的内容补入最近一次提交,保留原提交说明

git commit --amend --no-edit

git commit --amend 会创建新的提交哈希。已经推送并被他人使用的提交,不建议随意修改。

操作分支

查看分支

查看本地分支

git branch

查看本地和远程分支

git branch -a

查看分支及其上游跟踪关系

git branch -vv

显示当前分支名称

git branch --show-current

创建和切换分支

从当前提交创建新分支,但不切换

git branch <branch>

从指定提交、分支或标签创建新分支

git branch <branch> <start-point>

切换到已有分支

git switch <branch>

创建新分支并立即切换

git switch -c <new-branch>

从指定起点创建新分支并立即切换

git switch -c <new-branch> <start-point>

切换回上一个分支

git switch -

重命名和删除分支

重命名当前分支

git branch -m <new-name>

重命名指定分支

git branch -m <old-name> <new-name>

删除已经合并的本地分支

git branch -d <branch>

强制删除本地分支,不检查是否已经合并

git branch -D <branch>

删除远程分支

git push <remote> --delete <branch>

管理远程仓库

查看远程仓库名称和地址

git remote -v

添加远程仓库

git remote add origin <repository-url>

为 Fork 项目添加上游仓库

git remote add upstream <upstream-url>

修改远程仓库地址

git remote set-url origin <new-url>

重命名远程仓库

git remote rename <old-name> <new-name>

删除远程仓库配置

git remote remove <remote>

查看远程仓库详细信息

git remote show origin

获取、拉取与推送

获取远程仓库的新提交和引用,但不修改当前分支

git fetch origin

获取所有远程仓库,并清理已经删除的远程分支引用

git fetch --all --prune

拉取当前分支对应的远程分支并合并

git pull

只允许快进合并,避免自动产生合并提交

git pull --ff-only

拉取后使用 rebase 整理本地提交

git pull --rebase

第一次推送分支,并建立上游跟踪关系

git push -u origin <branch>

推送当前分支

git push

推送所有本地标签

git push origin --tags

普通协作中不要直接使用 git push --force。确需改写远程历史时,优先使用 git push --force-with-lease,它会在远程分支出现意外更新时拒绝覆盖。

合并分支

将指定分支合并到当前分支

git merge <branch>

即使可以快进,也创建一个合并提交

git merge --no-ff <branch>

发生冲突后,查看冲突文件

git status

解决冲突并暂存文件后,继续完成合并

git add <resolved-file>
git commit

放弃当前合并,恢复到合并前状态

git merge --abort

变基分支

将当前分支的提交重新应用到目标分支之后

git rebase <base-branch>

交互式整理最近 3 个提交

git rebase -i HEAD~3

解决冲突并暂存后继续变基

git add <resolved-file>
git rebase --continue

跳过当前无法应用的提交

git rebase --skip

放弃变基并恢复原状态

git rebase --abort

Rebase 会重写提交历史。不要对已经公开并被其他人基于其开发的共享分支执行 rebase。

挑选提交

将另一个分支中的指定提交应用到当前分支

git cherry-pick <commit>

解决冲突后继续 cherry-pick

git add <resolved-file>
git cherry-pick --continue

放弃本次 cherry-pick

git cherry-pick --abort

撤销工作区和暂存区修改

丢弃指定文件尚未暂存的修改

git restore <file>

将文件恢复到指定提交中的版本

git restore --source=<commit> <file>

取消暂存,但保留工作区修改

git restore --staged <file>

同时将暂存区和工作区恢复到 HEAD

# 会丢弃所有未提交修改
git restore --staged --worktree :/

撤销提交

创建反向提交

创建一个新提交,撤销最近一次提交的改动

git revert HEAD

创建一个新提交,撤销指定提交的改动

git revert <commit>

git revert 不会删除原提交,适合已经推送到共享仓库的历史。

移动当前分支指针

撤销最近一次提交,保留修改并保持暂存状态

git reset --soft HEAD~1

撤销最近一次提交,保留工作区修改但取消暂存

git reset HEAD~1

将当前分支、暂存区和工作区全部恢复到指定提交

git reset --hard <commit>
危险操作:`reset --hard` 与 `clean`

git reset --hard 会丢弃工作区和暂存区中的未提交修改。

git clean -fd 会永久删除未跟踪的文件和目录。执行前先使用预览命令:

只预览将要删除的内容

git clean -nd

确认无误后再执行

git clean -fd

使用 reflog 恢复误操作

查看 HEAD 和分支指针在本地的移动记录

git reflog

从误操作前的提交创建恢复分支,安全性更高

git switch -c recovery/<name> <commit>

确认提交无误后,也可以直接将当前分支恢复过去

git reset --hard <commit>

reflog 是本地记录,不会随 push 上传,也不能直接恢复其他电脑上的操作记录。

临时储藏修改

储藏已跟踪文件的修改

git stash push -m "WIP: description"

同时储藏未跟踪文件

git stash push -u -m "WIP: description"

查看储藏列表

git stash list

查看最近一次储藏的详细差异

git stash show -p

应用最近一次储藏,并从列表中删除

git stash pop

应用指定储藏,但保留在列表中

git stash apply stash@{0}

删除指定储藏

git stash drop stash@{0}

清空全部储藏

git stash clear

查看提交历史

查看完整提交历史

git log

使用单行、分支图和引用装饰显示全部历史

git log --oneline --graph --decorate --all

查看最近 10 条提交

git log -10 --oneline

查看指定作者的提交

git log --author="<name>"

查看指定时间之后的提交

git log --since="2026-01-01"

查看文件历史,并跟踪重命名

git log --follow -- <file>

查看指定提交的内容和差异

git show <commit>

查看某行代码最后由哪个提交修改

git blame -L <start>,<end> <file>

使用二分查找定位问题

git bisect 通过不断测试历史中点,帮助定位首次引入问题的提交。

开始二分查找

git bisect start

将当前提交标记为有问题

git bisect bad

将一个已知正常的历史提交标记为正常

git bisect good <good-commit>

Git 会自动切换到中间提交。测试后继续标记:

当前提交正常

git bisect good

当前提交有问题

git bisect bad

当前提交无法测试,跳过

git bisect skip

查看当前二分查找过程

git bisect log

使用 gitk 可视化当前范围,需要本机安装 gitk

git bisect visualize

结束二分查找并返回开始前的分支

git bisect reset

使用测试脚本自动执行二分查找

# 脚本退出码为 0 表示正常,1~127(除 125)表示有问题,125 表示跳过
git bisect run <test-command>

管理标签

查看所有标签

git tag

创建附注标签

git tag -a v1.0.0 -m "Release v1.0.0"

为指定提交创建标签

git tag -a v1.0.0 <commit> -m "Release v1.0.0"

查看标签信息

git show v1.0.0

推送指定标签

git push origin v1.0.0

删除本地标签

git tag -d v1.0.0

删除远程标签

git push origin --delete v1.0.0

同步 Fork 的上游仓库

首次配置

# origin 指向自己的 Fork,upstream 指向原仓库
git remote add upstream <upstream-url>
git remote -v

日常同步

git fetch upstream --prune
git switch main
git merge --ff-only upstream/main
git push origin main

如果本地 main 上存在自己的提交,无法快进合并,可以在确认提交尚未共享后使用:

git fetch upstream --prune
git switch main
git rebase upstream/main
git push --force-with-lease origin main

第二种方式会改写自己 Fork 中 main 分支的历史。多人共同使用该分支时,应优先选择合并而不是 rebase。

移除被 .gitignore 忽略的文件

1.移除当前目录下所有文件的 Git 追踪状态(不删除本地文件)

git rm -r --cached .

2.重新将所有文件添加到暂存区(此时 Git 会严格按照当前的 .gitignore 规则进行过滤)

git add .

3.提交新的干净状态

git commit -m "chore: 重新应用 .gitignore 规则并清理缓存"

喜欢的话,留下你的评论吧~

... 访问量
© 2026 跨越星轨的客 @Hoshiumi
Powered by theme astro-koharu · Inspired by Shoka