附录A Git命令与状态速查

本附录按工程场景组织命令。执行恢复、删除分支、回滚和历史操作前,先确认仓库、分支、提交和差异。

A.1 确认当前项目

git rev-parse --show-toplevel
git remote -v
git branch --show-current
git status
git log -1 --oneline

用途:

A.2 取得仓库和远程更新

git clone <仓库地址>
git fetch origin
git fetch --tags
git pull --ff-only

A.3 切换标签和分支

git switch --detach <标签>
git switch main
git switch -c issue-12-short-description
git branch --show-current
git branch -vv

从标签分离检出适合运行固定基线;开始修改前建立分支。

A.4 查看变化

git status --short
git diff
git diff --staged
git diff --stat
git diff -- <文件>
git diff <提交1>..<提交2>
git diff main...HEAD
命令 比较对象
git diff 工作区与暂存区
git diff --staged 暂存区与当前提交
git diff main...HEAD 当前分支相对共同起点的变化

AI完成修改后,至少查看status、diff --stat和完整diff。

A.5 选择提交内容

git add <文件>
git add -p
git diff --staged
git commit -m "<类型>(<范围>): <变化>"
git show --stat
git show

交互式暂存常用选择:

输入 作用
y 暂存当前补丁块
n 不暂存
s 尝试拆分
q 退出

A.6 查看历史和定位变化

git log --oneline --decorate --graph --all
git log -- <文件>
git show <提交>
git blame <文件>
git grep -n "<文本>"

blame用于定位某一行最近的提交,不用于简单判断个人责任;应继续阅读提交、议题和合并请求。

A.7 推送任务分支

git push -u origin <分支>
git push

推送只把提交发送到远程,不等于合并或发布。受保护主分支通过合并请求进入。

A.8 合并主分支更新

git fetch origin
git switch <任务分支>
git merge origin/main

发生冲突时:

git status

逐个解决文件,删除冲突标记,运行受影响测试,再执行:

git add <已解决文件>
git commit

无法继续且尚未提交合并结果时:

git merge --abort

A.9 恢复未提交变化

查看后再恢复:

git diff -- <文件>
git restore <文件>

取消暂存但保留修改:

git restore --staged <文件>

交互式恢复:

git restore -p <文件>

这些命令可能使未保存变化消失,执行前必须确认差异。

A.10 撤销已共享提交

git revert <提交>

revert新增一个反向提交,保留原历史。撤销合并提交需要识别主线父提交,应由维护者根据实际历史处理。

不要用改写公共历史的方法处理已经被团队取得的提交。

A.11 临时保存未完成工作

git stash push -m "<说明>"
git stash list
git stash show -p
git stash apply <stash>

应用后先检查差异,确认无误再删除暂存记录。

A.12 标签和版本

git tag -a v0.1.0 -m "<版本说明>"
git show v0.1.0
git push origin v0.1.0
git tag --list

已发布标签不移动。修正使用新版本。

A.13 文件是否被忽略

git check-ignore -v <文件>
git status --ignored

本地秘密、构建目录和可再生成日志通常忽略;测试样例、配置模板和发布证据按项目规则进入Git。

A.14 常见状态符号

git status --short的两列分别表示暂存区和工作区:

示例 含义
M file 工作区修改,未暂存
M file 修改已暂存
MM file 已暂存后又继续修改
A file 新文件已暂存
?? file 未跟踪文件
D file 删除已暂存
UU file 合并冲突未解决

A.15 安全检查顺序

在不确定Git状态时执行:

1. 确认仓库根目录
2. 确认当前分支
3. 查看status
4. 查看工作区diff
5. 查看staged diff
6. 查看最近提交
7. 再决定恢复、提交、合并或回滚

不要通过删除整个项目目录或使用破坏性重置来回避状态判断。