【git】 撤回一个本地提交

要撤回一个本地提交,有几种常见的方法

1. 撤销上一次提交但保留更改(最常用)

复制代码
# 撤销提交,但保留所有文件更改在工作区
git reset --soft HEAD~1
复制代码

2. 完全撤销上一次提交和所有更改

复制代码
# 撤销提交,并删除所有文件更改(慎用!)
git reset --hard HEAD~1
复制代码

3. 撤销提交但保留更改在暂存区

复制代码
# 撤销提交,但保留文件更改在暂存区
git reset --mixed HEAD~1  # --mixed 是默认选项
复制代码

4. 撤销指定次数的提交

复制代码
# 撤销最近3次提交,但保留更改在工作区
git reset --soft HEAD~3

# 撤销最近3次提交,并删除所有更改
git reset --hard HEAD~3
复制代码

5. 使用 revert(创建反向提交,推荐用于已推送的提交)

复制代码
# 创建一个新的提交来撤销之前的提交
git revert HEAD

# 撤销指定提交(通过 commit hash)
git revert <commit-hash>
复制代码

6. 查看提交历史后再撤销

复制代码
# 先查看提交历史
git log --oneline -5

# 然后撤销到指定提交(保留更改)
git reset --soft <commit-hash>

# 撤销到指定提交(删除更改)
git reset --hard <commit-hash>
复制代码

实用示例

假设你有以下提交历史:

复制代码
a1b2c3d (HEAD) 第三次提交
e4f5g6h 第二次提交
i7j8k9l 第一次提交
复制代码

场景1:想修改最后一次提交的内容

复制代码
git reset --soft HEAD~1
# 修改文件
git add .
git commit -m "新的提交信息"
复制代码

场景2:彻底删除最后一次提交

复制代码
git reset --hard HEAD~1
复制代码

场景3:已推送到远程的提交需要撤销

复制代码
git revert HEAD
git push origin <branch-name>
复制代码

重要提醒

  1. 谨慎使用 --hard:这会永久删除工作区和暂存区的更改

  2. 已推送到远程的提交 :使用 reset --hard 后强制推送需要谨慎,最好使用 revert

  3. 备份重要更改:不确定时先备份或创建分支




相关推荐
Web3_Daisy8 小时前
Pump.fun 与 FOMO 竞争背后的 Meme 市场变局
大数据·人工智能·金融·web3·区块链
论文避坑指南10 小时前
论文写作全流程AI合规边界:从选题到投稿的“红绿灯“清单
大数据·人工智能·深度学习
V哥AI增长12 小时前
Schema.org 结构化数据与GEO技术落地:AI引擎引用机制与JSON-LD部署实证研究
大数据·运维·人工智能
嘉禾望岗50312 小时前
datagrip连接带有kerberos认证的hive
大数据·kerberos
爱吃面的猫13 小时前
大数据Kafka3.x之——Kafka3.3.0安装与使用(详细)
大数据·分布式·zookeeper
无忧智库14 小时前
别再“裸奔”等护网了!万字拆解常态化攻防运营体系:从“应试教育”到“实战免疫”的进阶实录(PPT)
大数据·架构
用户36105886261214 小时前
Spark 核心之自定义累加器以及版本对比变化深度剖析
大数据
Elasticsearch14 小时前
Elasticsearch:使用 AI Agent 来创建 workflows
elasticsearch
观远数据14 小时前
当ChatBI遇上数据合规:AI+BI规模化落地的安全边界如何划定
大数据·人工智能·安全
具身智能进化论15 小时前
协作机器人产业进入规模化部署期,未来几年的增长从何而来
大数据·运维·人工智能·机器人·自动化·工厂方法模式