git常用修改命令

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 手动复制文件

进阶技巧

  1. 组合操作

    bash 复制代码
    # 重置到某个提交但保留工作区修改
    git reset --hard a1b2c3d && git stash apply
  2. 精确回退

    bash 复制代码
    # 仅回退某个文件到指定提交
    git checkout a1b2c3d -- src/main.c
  3. 排查问题

bash 复制代码
# 显示谁最后修改了某行代码
git blame -L 10,15 file.txt
相关推荐
我是小灰灰吖27 分钟前
解决高频率图像处理中的内存“只增不减”:glibc malloc_trim实战指南
linux·qt
小嵌同学29 分钟前
Linux 内核中断处理机制详解:上半部、下半部与延迟执行策略
linux·嵌入式·bsp
breeze jiang1 小时前
TypeScript 工具类型怎么记:从 Pick、Omit 到 keyof 与 Exclude 推导
linux·ubuntu·typescript
深念Y1 小时前
Wine 运行 HiTool 踩坑记录
linux·windows·容器·桌面·wine·虚拟器
bksczm1 小时前
Linux之网络层协议(IP协议)
linux·网络·tcp/ip
深念Y1 小时前
无头电视盒子改服务器调优记录
linux·运维·服务器·串口·嵌入式·电视盒子·海思
我是小灰灰吖2 小时前
Qt 6.9.3 Ubuntu 22.04 虚拟键盘显示问题全记录与解决方案
linux·qt·ubuntu
Mortalbreeze2 小时前
深入理解TCP协议(一):TCP报文格式详解
linux·服务器·网络·tcp/ip
淡海水2 小时前
01-08-运行时-虚方法分派与接口调用的底层实现
linux·windows·microsoft·c#·虚方法·vtable·vsd
啦啦啦啦啦zzzz2 小时前
高级I/O函数(一)
linux·服务器·网络·c++·网络编程