【Git】Git03:Git版本回退、文件修改与撤销

第三章 Git版本回退、文件修改与撤销

一、回顾提交历史(进阶查看)

除了 git log,还可以用更简洁的格式查看提交历史:

bash

复制代码
git log --oneline
  • 输出示例:a1b2c3d (HEAD -> main) 首次提交:添加README.md文件
    • a1b2c3d 是提交的哈希值(版本唯一标识)。
    • HEAD -> main 表示当前分支是 main,且指向该提交。
  • 实际执行界面参考:

二、文件修改与提交流程

1. 修改工作区文件

README.md 为例,在文件中添加新内容:

markdown

复制代码
这是我的第一个Git项目
添加了新的说明内容,用于演示修改流程

2. 查看修改状态

执行 git status,会提示 README.md 处于 **"已修改(Changes not staged for commit)"** 状态。

实际执行界面参考:

3. 查看具体修改内容

git diff 查看工作区与暂存区的差异:

bash

复制代码
git diff README.md
  • 输出会显示文件的具体修改(新增行用 + 标记)。
  • 实际执行界面参考

4. 暂存并提交修改

bash

复制代码
git add README.md  # 暂存修改
git commit -m "更新README.md,添加新说明内容"  # 提交到版本库

实际执行界面参考:

查看历史记录 :git log --oneline

实际执行界面参考:

5. 在重复修改并提交

为后面命令执行效果,再重复修改一次并提交,会多一条修改历史


三、版本回退(回到旧版本)

1. 基于 git reset 的 "硬回退"(慎用,会丢失后续提交)

若要回退到某个历史版本,可使用 git reset --hard <提交哈希值>示例 :假设提交历史是 f0c1fab(旧版本)→ 596cc1a(新版本),现在要回退到 f0c1fab

bash

复制代码
git reset --hard f0c1fab
  • 作用:工作区、暂存区、版本库全部回退 到目标版本,后续基于 e4f5g6h 的提交会被 "覆盖"(本地未推送的话会丢失,需谨慎)。
  • 实际执行界面参考:

2. 基于 git revert 的 "安全回退"(推荐,保留提交历史)

若要撤销某个旧提交的修改(但保留提交记录),用 git revert <提交哈希值>示例 :假设提交历史是 19a6183(旧版本)→ f0c1fab(新版本),撤销 f0c1fab 这个提交的修改:

bash

复制代码
git revert f0c1fab
  • 执行后会自动打开文本编辑器,让你填写 "撤销提交" 的说明,保存后会生成一个新的撤销提交,历史记录更清晰。

执行git revert期间,打开的编辑器界面:

当前REDME.MD的内容为:

四、撤销操作(后悔药)

1. 撤销工作区的修改(文件回到 "最后一次暂存 / 提交" 的状态)

若工作区修改不满意,可撤销:

bash

复制代码
git checkout -- README.md
  • 注意:此操作会丢弃工作区未暂存的修改,请确保修改无需保留后再执行。

实际执行界面参考:

2. 撤销暂存区的修改(文件从暂存区回到工作区)

若已 git add 但还未 git commit,想撤销暂存:

bash

复制代码
git reset HEAD README.md
  • 执行后,文件状态回到 "已修改但未暂存",可重新修改或放弃。

实际执行界面参考:


附录

Git 常用版本回退、文件修改与撤销命令汇总列表如下

📋 版本回退命令

1. 查看提交历史

命令 说明
git log 查看详细提交历史
git log --oneline 查看简洁版提交历史
git log -n 5 查看最近5次提交
git log --graph 图形化显示分支合并历史
git reflog 查看所有操作记录(包括已删除的提交)

2. 版本回退

命令 说明 风险等级
git reset --soft HEAD~1 回退到上一个版本,保留工作区和暂存区
git reset --mixed HEAD~1 回退到上一个版本,保留工作区,重置暂存区
git reset --hard HEAD~1 彻底回退到上一个版本,丢弃所有修改
git reset --hard <commit_id> 回退到指定提交版本
git revert <commit_id> 创建新的提交来撤销指定提交

3. 相对版本号

命令 说明
HEAD 当前版本
HEAD~1HEAD^ 上一个版本
HEAD~2 上两个版本
HEAD~3 上三个版本

📝 文件修改与撤销命令

1. 工作区文件操作

命令 说明
git restore <file> 撤销工作区的修改(Git 2.23+)
git checkout -- <file> 撤销工作区的修改(旧版本)
git clean -f 删除未跟踪的文件
git clean -fd 删除未跟踪的文件和目录
git clean -n 预览将要删除的文件(dry-run)

2. 暂存区操作

命令 说明
git restore --staged <file> 将文件从暂存区移回工作区(Git 2.23+)
git reset HEAD <file> 将文件从暂存区移回工作区(旧版本)
git reset . 将所有文件从暂存区移回工作区

3. 文件删除与恢复

命令 说明
git rm <file> 删除文件并添加到暂存区
git rm --cached <file> 从版本控制中删除文件,但保留在本地
git restore <file> 恢复被误删的文件
git checkout HEAD -- <file> 从最新提交恢复指定文件

🔄 撤销提交操作

1. 撤销最近提交

命令 说明 使用场景
git commit --amend 修改最近一次提交信息 提交信息写错
git commit --amend --no-edit 添加文件到最近提交,不修改信息 漏文件了
git reset --soft HEAD~1 撤销提交但保留更改在暂存区 重新组织提交

2. 撤销特定提交

命令 说明 区别
git revert <commit_id> 创建新提交来撤销指定提交 安全,保留历史
git reset --hard <commit_id> 直接回退到指定提交 危险,重写历史

⚠️ 重要注意事项

  1. --hard 重置会丢失所有未提交的修改

  2. 已推送到远程的提交不要使用 reset --hard

  3. revertreset 更安全,适合团队协作

  4. 操作前先用 git status 确认当前状态

  5. 重要修改前先备份或创建新分支

相关推荐
QX_hao2 小时前
【git】--远程Git仓库的名称发生更改
git
正经教主4 小时前
【Git】Git04:分支管理
git
海域云赵从友12 小时前
2025年印尼服务器选型指南:跨境业务落地的合规与性能双解
人工智能·git·github
不会写代码的里奇13 小时前
VMware Ubuntu 22.04 NAT模式下配置GitHub SSH完整教程(含踩坑实录+报错_成功信息对照)
linux·经验分享·笔记·git·ubuntu·ssh·github
木子杳衫16 小时前
【Git】处理报错原因
git
SHIPKING39316 小时前
【Git】2025全图文详解安装教程
git
无限进步_17 小时前
C语言atoi函数实现详解:从基础到优化
c语言·开发语言·c++·git·后端·github·visual studio
地球没有花1 天前
gitlab cicd首次操作
运维·git·ci/cd·gitlab
无限进步_2 天前
【C语言】贪吃蛇游戏设计思路深度解析:从零开始理解每个模块
c语言·开发语言·c++·git·游戏·github·visual studio