06 git reset 回退版本
git reset 回退版本
git reset
命令用于将文件回退到某个历史版本。
三种回退模式
回退选项 | 工作区 | 暂存区 | 版本库 |
---|---|---|---|
--soft | 保持不变 | 保持不变 | HEAD 指向历史版本 |
--mixed(默认) | 保持不变 | 清空 | HEAD 指向历史版本 |
--hard | 清空并用历史版本覆盖 | 清空并用历史版本覆盖 | HEAD 指向历史版本 |
示例
# 1. 重置到指定提交,但保留工作区和暂存区的更改(仅移动 HEAD)
git reset --soft <commit_id>
# 示例: 回退到前一个提交,但保留暂存区和工作区中的所有修改
git reset --soft HEAD~1
# 2. 重置到指定提交,清除暂存区的更改,但保留工作区的修改
git reset --mixed <commit_id>
# 示例: 取消最近一次提交,保留工作区中的代码更改,但暂存区已被清空
git reset --mixed HEAD~1
# 3. 重置到指定提交,并丢弃所有未提交的更改(慎用)
git reset --hard <commit_id>
# 示例: 完全回退到上一个提交,删除所有工作区和暂存区的修改
git reset --hard HEAD~1
# 4. 取消某个文件的暂存状态,但保留文件内容不变
git reset HEAD <file>
# 示例: 取消暂存 main.py,但文件内容保持不变
git reset HEAD main.py
# 5. 丢弃对某个文件的所有本地更改(谨慎使用)
git checkout -- <file>
# 示例: 将 main.py 恢复到最后一次提交的状态,丢弃所有未提交的修改
git checkout -- main.py
# 6. 撤销最近一次的提交,但保留更改并重新提交
git reset --soft HEAD~1
git commit -m "新的提交信息"
# 示例: 撤销最近一次提交,保留文件修改并重新提交
git reset --soft HEAD~1
git commit -m "新的提交信息"
# 7. 重置远程分支(强制同步,谨慎使用)
git reset --hard origin/main
git pull origin main --force
# 示例: 强制同步本地分支与远程分支,丢弃所有本地未推送的更改
git reset --hard origin/main
git pull origin main --force
补充内容
1.HEAD 概念
在 Git 中,HEAD
是 当前分支的最新提交的指针,可以理解为Git当前所在的“位置”或“快照”。
2.git log 查看提交历史
➜ testgit git:(master) git --no-pager log --oneline
a280d92 (HEAD -> master) 第三次提交
b25cfec 第二次提交
2ea7240 第一次提交
Details
# 1. 基本日志输出
git log # 默认分页显示详细提交信息
git --no-pager log # 直接输出,不进入分页模式
# 2. 简洁模式
git log --oneline # 简短格式:哈希 + 提交信息
git log --pretty=short # 显示作者 + 简短提交信息
# 3. 图形化显示
git log --graph # 以 ASCII 方式绘制分支合并图
git log --oneline --graph --all # 简洁图形化显示所有分支提交
# 4. 详细模式
git log --stat # 显示修改的文件及行数变更
git log -p # 显示具体代码改动(类似 git diff)
git log --name-only # 仅显示修改的文件名
git log --name-status # 显示文件状态(A = 新增,M = 修改,D = 删除)
# 5. 过滤提交
git log -n 5 # 显示最近 5 条提交
git log --since="2024-01-01" --until="2024-03-01" # 按时间范围筛选
git log --author="Alice" # 只显示 Alice 的提交
git log --grep="bugfix" # 只显示提交信息包含 "bugfix" 的提交
# 6. 按文件查看提交
git log -- src/main.py # 只查看 src/main.py 的提交记录
git log -p -- src/main.py # 查看 src/main.py 的具体变更
# 7. 自定义格式
git log --pretty=format:"%h - %an, %ar : %s" # 自定义格式
git log --pretty=format:"%H%n%an%n%ad%n%s%n%b%n" # 详细格式(适合脚本处理)