🌿

Git 命令速查

Git 常用命令速查手册,含分支、变基、回退与排障场景

🔍
79 条命令

⚙️ 初始化与配置

git init

在当前目录初始化仓库

示例git init
git clone <仓库地址>

克隆远程仓库,加 --depth 1 只拉最新一层

示例git clone --depth 1 https://github.com/user/repo.git
git config --global user.name "<名字>"

设置全局提交者姓名

示例git config --global user.name "Zhang San"
git config --global user.email "<邮箱>"

设置全局提交邮箱,需与代码托管平台一致

示例git config --global user.email "me@example.com"
git config --global init.defaultBranch main

把新仓库默认分支设为 main

示例git config --global init.defaultBranch main
git config --list --show-origin

查看所有配置及其来源文件,排查配置冲突

示例git config --list --show-origin
git remote set-url origin <新地址>

修改远程仓库地址(换域名或改 SSH/HTTPS 时)

示例git remote set-url origin git@github.com:user/repo.git

📝 暂存与提交

git status -s

简洁格式查看工作区状态

示例git status -s
git add -p

交互式逐块暂存,把同一文件的改动拆成多个提交

示例git add -p
git commit -m "<信息>"

提交暂存区内容

示例git commit -m "feat: 支持导出 CSV"
git commit --amend

把改动并入上一次提交,同时可改提交信息;未推送才可用

示例git commit --amend -m "fix: 修正边界判断"
git commit --amend --no-edit

并入上一次提交但不改信息

示例git commit --amend --no-edit
git restore <文件>

撤销工作区中尚未暂存的修改(Git 2.23+)

示例git restore src/main.js
git restore --staged <文件>

把文件从暂存区撤回到工作区

示例git restore --staged src/main.js
git diff

查看尚未暂存的改动,--cached 查看已暂存的

示例git diff --cached

🌿 分支管理

git branch -a

列出本地与远程所有分支

示例git branch -a
git switch -c <分支名>

创建并切换到新分支(推荐写法)

示例git switch -c feature/login
git switch <分支名>

切换到已有分支

示例git switch main
git switch -

在两个分支间来回切换

示例git switch -
git branch -m <新名字>

重命名当前分支

示例git branch -m feature/auth
git branch -d <分支名>

删除已合并的分支,未合并会拒绝

示例git branch -d feature/login
git branch -D <分支名>

强制删除未合并分支,改动会丢失

示例git branch -D feature/login
git push origin --delete <分支名>

删除远程分支

示例git push origin --delete feature/login
git branch --merged main

列出已合并进 main 的分支,便于批量清理

示例git branch --merged main

☁️ 远程同步

git pull --rebase

拉取远程并以变基方式合并本地提交,避免多余合并节点

示例git pull --rebase
git fetch --all --prune

拉取所有远程引用并清理已被删除的远端分支

示例git fetch --all --prune
git push -u origin <分支名>

首次推送并绑定上游分支,之后可直接 git push

示例git push -u origin feature/login
git remote -v

查看远程仓库地址

示例git remote -v
git push --tags

推送本地标签到远程(普通 push 不带标签)

示例git push --tags
git push --force-with-lease

比 -f 安全的强推:远端有新提交时拒绝推送

示例git push --force-with-lease

📜 查看历史

git log --oneline --graph --all -20

图形化查看最近 20 条提交与各分支关系

示例git log --oneline --graph --all -20
git log -p <文件>

查看某个文件的完整修改历史

示例git log -p src/main.js
git log --author="<名字>" --since="1 week ago"

按作者与时间筛选提交

示例git log --author="Zhang" --since="1 week ago"
git log -S"<关键字>" --oneline

搜索引入或删除该关键字的提交

示例git log -S"apiKey" --oneline
git blame -L 10,20 <文件>

查看指定行区间最后一改是谁提交的

示例git blame -L 10,20 src/main.js
git show <提交号>

查看某次提交的完整改动内容

示例git show a1b2c3d
git reflog

查看本地所有指针移动记录,误删分支后靠它找回

示例git reflog

↩️ 撤销与回退

git revert <提交号>

生成一次反向提交来抵消改动,不改历史,适合已推送的分支

示例git revert a1b2c3d
git revert --no-commit <提交号>

把撤销改动放进工作区而不直接提交,可合并成一次

示例git revert --no-commit HEAD~2
git reset --soft HEAD~1

回退一次提交,改动保留在暂存区

示例git reset --soft HEAD~1
git reset --mixed HEAD~1

回退一次提交,改动退回工作区(默认行为)

示例git reset HEAD~1
git reset --hard HEAD~1

彻底丢弃最后一次提交及其改动,不可恢复需谨慎

示例git reset --hard HEAD~1
git checkout <提交号> -- <文件>

把单个文件恢复到某个历史版本

示例git checkout a1b2c3d -- src/main.js
git clean -fd

删除未跟踪的文件与目录,加 -n 可先预览

示例git clean -fdn

🔀 合并与变基

git merge <分支名>

把目标分支合并进当前分支,保留完整历史

示例git merge feature/login
git merge --no-ff <分支名>

禁用快进强制生成合并提交,保留分支拓扑

示例git merge --no-ff feature/login
git rebase <目标分支>

把当前分支的提交移到目标分支末端,历史更线性

示例git rebase main
git rebase -i HEAD~3

交互式整理最近 3 次提交:合并、改序、改信息

示例git rebase -i HEAD~3
git cherry-pick <提交号>

把某次提交单独应用到当前分支

示例git cherry-pick a1b2c3d
git cherry-pick -n <提交号>

应用改动但不生成提交,便于自己重新组织

示例git cherry-pick -n a1b2c3d
git merge --abort

放弃本次合并并恢复到合并前状态

示例git merge --abort
git rebase --abort

放弃本次变基,冲突处理不来时用

示例git rebase --abort
git checkout --ours <文件>

冲突时选用当前分支版本,--theirs 选用对方版本

示例git checkout --theirs package-lock.json

📥 Stash 暂存

git stash push -m "<说明>"

把当前改动压入暂存栈并还原工作区

示例git stash push -m "临时切分支"
git stash -u

连同未跟踪的新文件一起暂存

示例git stash -u
git stash list

查看所有暂存记录

示例git stash list
git stash pop

恢复最近一条暂存并从栈中删除

示例git stash pop
git stash apply stash@{1}

恢复指定暂存但不删除,可重复应用到多个分支

示例git stash apply stash@{1}
git stash show -p stash@{0}

查看某条暂存的具体改动内容

示例git stash show -p stash@{0}
git stash branch <分支名> stash@{0}

基于某条暂存创建新分支,改动已应用

示例git stash branch fixbug stash@{0}
git stash clear

清空全部暂存记录,不可恢复

示例git stash clear

🏷️ 标签与版本

git tag -a v1.2.0 -m "<说明>"

创建带注释的标签,适合发版

示例git tag -a v1.2.0 -m "发布 1.2.0"
git tag

列出所有标签,加 -l "v1.*" 可模糊筛选

示例git tag -l "v1.*"
git show v1.2.0

查看标签指向的提交与说明

示例git show v1.2.0
git describe --tags --abbrev=0

获取当前提交最近的标签,常用于生成版本号

示例git describe --tags --abbrev=0
git push origin v1.2.0

推送单个标签到远程

示例git push origin v1.2.0
git tag -d v1.2.0 && git push origin :refs/tags/v1.2.0

删除本地标签并同步删除远程标签

示例git tag -d v1.2.0 && git push origin :refs/tags/v1.2.0

🧩 子模块

git submodule add <仓库地址> <路径>

添加子模块并在指定路径落地

示例git submodule add https://github.com/u/lib.git vendor/lib
git submodule update --init --recursive

首次克隆后拉取全部子模块内容

示例git submodule update --init --recursive
git clone --recurse-submodules <仓库地址>

克隆主仓库时同时拉取子模块

示例git clone --recurse-submodules https://github.com/u/repo.git
git submodule foreach git pull origin main

批量把所有子模块更新到远程最新

示例git submodule foreach git pull origin main
git submodule deinit -f <路径>

注销子模块并清空工作区内容

示例git submodule deinit -f vendor/lib

🔧 排查与维护

git bisect start

启动二分查找定位引入 Bug 的提交

示例git bisect start
git bisect bad && git bisect good <提交号>

标记当前为坏版本、指定版本为好版本

示例git bisect bad && git bisect good v1.1.0
git bisect reset

结束二分查找并回到原分支

示例git bisect reset
git fsck --lost-found

找回丢失的对象,配合 reflog 恢复误删提交

示例git fsck --lost-found
git gc --prune=now

清理松散对象并压缩历史,减小仓库体积

示例git gc --prune=now
git count-objects -vH

查看仓库对象数量与占用空间

示例git count-objects -vH
git rm --cached <文件> && echo <文件> >> .gitignore

停止跟踪已入库的文件但保留本地副本

示例git rm --cached config.local.json

Git 命令速查怎么用

Git 常用命令速查:分支、rebase、stash、cherry-pick、回滚等场景一搜就有。

  1. 按场景搜索命令
  2. 点击复制
  3. 替换其中的分支名或提交号

小贴士涉及改写历史的命令,先在本地分支验证再推到远端。

Git 命令速查常见问题

Git 命令速查是免费的吗?

完全免费,无需注册登录,也不限使用次数。997 工具箱所有工具都不收费。

使用Git 命令速查会把我的数据上传到服务器吗?

不会。Git 命令速查在浏览器本地完成计算,输入的文本和文件都不会离开你的设备,页面关闭后数据即消失。

Git 命令速查在手机上能用吗?

可以。页面做了移动端适配,手机和平板的浏览器打开同样能正常使用,也不需要安装任何 App。