Git 命令行速查

适合打印的 Git 2.43.0 速查表,涵盖状态检查、暂存、分支管理、变更集成、撤销操作与提交恢复。

Git 2.43.0 打印为 1 页
下载 .md

检查仓库状态

git status --short --branch 显示分支、与上游的差异,以及工作树和索引的精简状态
git diff -- path/to/file 比较单个路径的未暂存内容与索引
git diff --cached -- path/to/file 比较单个路径的暂存内容与 HEAD
git diff HEAD -- path/to/file 比较工作树内容与 HEAD,同时包含已暂存和未暂存的变更
git log --oneline --decorate --graph --all 绘制从所有本地引用可达的提交图
git show --stat --oneline COMMIT 检查单个提交的头信息和文件级变更摘要

暂存与提交

git add -- path/to/file 把路径的当前内容复制到索引
git add -p -- path/to/file 交互选择要写入索引的补丁块
git restore --staged -- path/to/file HEAD 重置索引中的路径,同时保留工作树修改
git diff --cached --check 报告待提交变更中的空白错误
git commit -m 'Explain the change' 用非空消息提交已暂存的快照
git commit --amend --no-edit 用当前索引替换最新提交,同时保留原提交消息

分支与标签

git switch -c feature/name main main 创建 feature/name 并切换到该分支
git switch main 把工作树和索引切换到本地 main 分支
git branch --show-current 输出当前分支名;HEAD 分离时不输出内容
git branch -m feature/new-name 重命名当前分支,不改变其提交
git branch -d feature/name 仅在 Git 判定分支已完全合并时将其删除
git tag -a v1.2.3 -m 'Release v1.2.3' HEAD 创建附注标签
git show --no-patch v1.2.3 检查标签及其目标,不输出补丁

比较版本

git rev-parse --verify main^{commit} 解析 main,并要求结果指向提交
git merge-base main feature/name 输出两个提交端点的一个最佳共同祖先
git log main..feature/name --oneline 列出可从功能分支到达、但不能从 main 到达的提交
git log --left-right --oneline main...feature/name 显示两侧各自独有的提交,并标明每个提交所属的一侧
git diff main...feature/name 比较功能分支端点与它相对 main 的合并基点
git diff COMMIT^ COMMIT -- 显示非根提交相对其第一父提交的变更

获取并检查远程

git remote -v 显示每个远程仓库配置的获取与推送 URL
git config --get-all remote.origin.fetch 检查从 origin 获取时使用的引用规格
git fetch --prune origin origin 下载数据,并删除失效的远程跟踪引用
git branch --remotes --verbose 列出本地远程跟踪引用及其端点主题
git log HEAD..origin/main --oneline 列出 origin/main 中已有而 HEAD 中没有的已获取提交
git diff --stat HEAD...origin/main 汇总远程一侧从合并基点开始的变更

集成与发布

git merge --ff-only origin/main 仅在无需合并提交时推进当前分支
git merge --no-ff feature/name 合并功能分支;即使可以快进,也创建合并提交
git pull --ff-only origin main 获取远程 main,且只接受快进更新
git push --dry-run origin HEAD 预览远程引用更新,但不改变该引用
git push -u origin feature/name 发布本地分支,并记录它的上游
git push --force-with-lease origin feature/name 仅在租约预期仍匹配时强制更新已改写的分支
git push --atomic origin main v1.2.3 要求分支和标签更新全部成功或全部失败

解决合并冲突

git ls-files --unmerged 显示每个冲突在索引中记录的基点、阶段 2 侧和阶段 3 侧
git show :2:path/to/file 读取当前操作的阶段 2 版本
git show :3:path/to/file 读取当前操作的阶段 3 版本
git add -u -- path/to/file 用已解决状态替换已跟踪路径在索引中的未合并条目
git diff --check 继续操作前查找遗留的冲突标记与空白错误
git merge --continue 解决并暂存全部冲突后完成合并
git merge --abort 需要放弃合并时恢复到合并前的状态

变基与拣选

git rebase main 把当前分支独有的提交重放到 main
git rebase -i HEAD~5 重排、合并、编辑或丢弃最近五个提交
git rebase --onto main OLD_BASE feature/name OLD_BASE..feature/name 重放到 main,并检出改写后的功能分支
git rebase --continue 暂存冲突解决结果后继续已暂停的变基
git rebase --abort 把分支和工作树恢复到变基前的状态
git cherry-pick -x COMMIT 应用一个提交的变更,并记录其来源标识
git cherry-pick --abort 恢复到当前拣选序列开始前的状态

按存储层撤销

git restore -- path/to/file 把索引版本复制到工作树,丢弃未暂存的已跟踪修改
git restore --source=COMMIT -- path/to/file 用提交中的版本替换工作树路径,不改变索引
git restore --source=HEAD --staged --worktree -- path/to/file HEAD 同时替换单个路径的索引版本和工作树版本
git reset --soft HEAD^ HEAD 移到第一父提交,不改变索引或工作树
git reset --mixed HEAD^ 移动 HEAD,用其父提交重置索引,并保持工作树不变
git reset --hard HEAD^ 移动 HEAD,并用其父提交重置索引和工作树中的已跟踪内容
git revert COMMIT 记录普通提交的反向变更;反转合并提交还需指定 -m

储藏与工作树

git stash push -u -m 'Context for later' 储藏已跟踪和未跟踪的变更,并附上可搜索的消息
git stash list 列出储藏条目,不应用它们
git stash show --patch stash@{0} 检查一个储藏条目中保存的完整补丁
git stash apply stash@{0} 应用储藏,同时保留该储藏条目
git stash branch rescue/stashed stash@{0} 在储藏基点创建分支并应用储藏;仅在成功时删除该条目
git worktree add -b hotfix/name ../repo-hotfix main 创建新分支,并在另一个工作树中检出它
git worktree list --porcelain 以稳定、便于脚本解析的格式列出工作树

定位回归与恢复

git bisect start BAD GOOD 在已知错误提交与已知正确提交之间开始二分查找
git bisect run ./test-regression.sh 按退出状态分类版本:0 为正确,125 为跳过,其他 1–127 值为错误
git bisect reset 结束二分查找,返回开始前检出的分支或提交
git reflog --all --date=iso 检查 HEAD 和其他引用带日期的本地移动记录
git show --stat --oneline HEAD@{1} 恢复前检查引用日志中的候选位置
git branch rescue/lost HEAD@{1} 创建新分支,使确认过的引用日志位置保持可达
git fsck --unreachable 报告当前不可达、可能包含丢失提交的对象

检查对象与引用

git cat-file -t OBJECT 输出对象类型
git cat-file -p OBJECT 根据对象类型,以易读形式输出其内容
git ls-tree -r --name-only COMMIT 递归列出提交快照中的全部路径
git show COMMIT:path/to/file 直接读取提交快照中的一个文件
git ls-files --stage 显示每个索引条目的模式、对象标识、阶段与路径
git for-each-ref --format='%(refname) %(objectname)' refs/heads/ 列出本地分支引用及其完整目标标识
git update-ref refs/heads/main NEW OLD 仅当 main 仍指向 OLD 时,才以原子方式将其更新为 NEW

向你的 AI 准确表达

规则包 · 计算机基础

供编码智能体使用的 计算机基础 规则

下载本方向的常见陷阱与审查项,文件格式可直接供编码智能体读取。