Git 最难的不是记住命令,而是知道当前改动在哪里、下一条命令会改变什么、操作后如何验证。本文用一个最小项目串起日常流程,并优先选择可恢复的命令。
学习目标:完成一次提交、创建功能分支、检查差异,并能分别撤销工作区修改、暂存内容和已发布提交。
一、准备环境与测试目录
先确认 Git 可用。示例适用于 Git 2.23 及以上版本,因为会使用更清晰的 git switch 与 git restore。
git --version
mkdir git-practice
cd git-practice
git init
git config user.name "Your Name"
git config user.email "you@example.com"
验证:执行 git status,应看到当前位于默认分支,并且“尚无提交”。如果这是团队项目,姓名和邮箱应与代码托管平台一致。
二、完成第一次可追踪提交
- 创建
README.md,写入项目目标。 - 用
git diff查看尚未暂存的修改。 - 暂存后,用
git diff --staged再次确认将要提交的内容。
printf '# Git Practice\n\nA recoverable workflow.\n' > README.md
git status --short
git diff
git add README.md
git diff --staged
git commit -m "docs: add project readme"
git log --oneline --decorate -5
提交前检查 --staged 差异是一个重要习惯:它能防止调试日志、密码或无关文件进入历史。
三、在独立分支开发
git switch -c feature/notes
printf '\n## Notes\n- Keep commits small.\n' >> README.md
git add README.md
git commit -m "docs: add workflow notes"
git switch -
git log --oneline --all --graph --decorate
git switch - 会回到上一个分支。最后一条命令应显示两条分支线,功能提交只存在于 feature/notes。
四、按改动所在位置安全撤销
| 场景 | 命令 | 结果 |
|---|---|---|
| 文件改坏但未暂存 | git restore 文件 | 恢复到索引中的版本 |
| 误把文件加入暂存区 | git restore --staged 文件 | 取消暂存,保留工作区内容 |
| 已提交且可能已共享 | git revert 提交号 | 生成反向提交,不改写历史 |
# 演练取消暂存
printf 'temporary\n' > debug.log
git add debug.log
git restore --staged debug.log
git status --short
# 演练撤销工作区改动
git restore README.md
不要把 git reset --hard 当作普通清理命令:它可能同时丢弃索引和工作区内容。只有明确知道目标提交、确认没有未保存工作,并有备份时才考虑使用。
五、提交前的固定检查清单
git status --short:确认文件范围。git diff:检查未暂存修改。git diff --staged:检查即将提交的最终内容。git log --oneline --graph --decorate -10:确认提交落在正确分支。
常见问题与恢复
提交到了错误分支
如果提交尚未推送,可先创建正确分支保存它:git branch feature/correct。随后再根据团队规则处理原分支;不要急着删除或硬重置。
不知道某条命令会做什么
先执行 git status 并复制仓库做演练。Git 的可恢复性来自“小提交、先看差异、共享历史用 revert”。