1. 代码回退与历史修改
git reset
模式 | 命令示例 | 作用范围 | 适用场景 |
---|---|---|---|
--soft |
git reset --soft HEAD~1 |
仅移动 HEAD 指针 |
重新提交之前的修改 |
--mixed |
git reset HEAD~1 (默认) |
重置暂存区 | 取消已 add 但未提交的文件 |
--hard |
git reset --hard a1b2c3d |
彻底丢弃工作区和暂存区 | 彻底回退到某个版本(慎用!) |
git revert
git revert <commitid> # 生成一个反向提交
git revert -m 1 <merge_commit> # 撤销合并提交
- 特点:安全撤销(保留历史),适合已推送的提交
git commit --amend
bash
git commit --amend # 修改最近提交信息
git commit --amend --no-edit # 只修改提交内容
注意:仅限未推送的提交!
2. 分支管理
git branch
命令 | 作用 |
---|---|
git branch -f main HEAD~3 |
强制移动分支指针 |
git branch -d feature |
删除已合并分支 |
git branch -D hotfix |
强制删除未合并分支 |
git branch --set-upstream-to=origin/main |
绑定远程分支 |
3. 提交与变更查看
git log
bash
git log --oneline --graph -n 5 # 简洁图形化历史
git log -p -S "keyword" # 搜索代码变更
git log --since="2024-01-01" --author="John" # 条件过滤
git show
bash
git show HEAD~2:src/main.c # 查看历史文件内容
git show a1b2c3d --stat # 显示提交影响的文件
4. 暂存与恢复
git stash
bash
git stash push -m "WIP: login feature" # 暂存并命名
git stash list # 查看暂存栈
git stash apply stash@{1} # 恢复指定暂存
git stash drop stash@{0} # 删除暂存
git checkout HEAD -- <file>
bash
git checkout HEAD -- config.yml # 从最近提交恢复文件
git checkout a1b2c3d -- . # 恢复整个目录到历史版本
5. 差异比较与补丁
git diff
命令 | 比较范围 |
---|---|
git diff |
工作区 vs 暂存区 |
git diff --cached |
暂存区 vs 最新提交 |
git diff HEAD~2 HEAD |
两个提交间的差异 |
git diff --word-diff |
单词级差异显示 |
补丁操作
bash
git diff > changes.patch # 生成补丁
git apply --check changes.patch # 测试应用
git apply changes.patch # 应用补丁
git format-patch HEAD~2 # 生成可邮件发送的补丁
命令对比表
场景 | 推荐命令 | 替代方案 |
---|---|---|
撤销本地修改 | git checkout HEAD -- file |
git restore file |
修改提交信息 | git commit --amend |
git rebase -i |
安全撤销提交 | git revert |
git reset + force push (危险) |
暂存临时改动 | git stash |
手动复制文件 |
进阶技巧
-
组合操作
bash# 重置到某个提交但保留工作区修改 git reset --hard a1b2c3d && git stash apply
-
精确回退
bash# 仅回退某个文件到指定提交 git checkout a1b2c3d -- src/main.c
-
排查问题
bash
# 显示谁最后修改了某行代码
git blame -L 10,15 file.txt