git revert 用法 git版本回退 git回退 git撤回merge分支合并

本文详细介绍了git revert用于撤销特定提交并保持历史连续性的方法,以及与git reset的区别,包括回滚方式、合并旧版本的影响和适用场景。特别提到了git revert HEAD和git reset--hard的使用技巧,以及版本控制中的注意事项。

转载至
git revert 用法
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
* git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
版本会递增,不影响之前提交的内容


git revert 和 git reset的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

注意:
git revert HEAD 后进入vim编辑模式 参考
可直接输入:wq保存退出

git撤回分支合并
1.git log 指令查看一下最近几次的提交信息。
2.git reset --hard 5f9e8d91eb7433f6a5f94ffcebc3dd6dc7f528af
5f9e8d91eb7433f6a5f94ffcebc3dd6dc7f528af 是log中看到的commit的ID
3. git push 覆盖远端 覆盖之前可以先跑一下本地确认没问题
————————————————————————————————————————————
公司若有tage版本记录 可以直接定位到上次版本发布时的节点ID 然后本地备份代码后 执行
git reset --hard 36c42cc014 36c42cc014即对应节点ID在这里插入图片描述

<think>嗯,用户这次问的是git revert如何一次性回退多个commit。用户在上次对话中已经提供了两篇参考资料,看来ta正在处理一个包含多次提交的回退需求,而且特别关注如何避免产生多个revert提交记录。 从引用内容看,关键点在于: 1)常规做法是逐个revert每个commit,但会产生多条新纪录 2)引用[2]提到区间回退的概念(git revert commit1..commit2),这个左开右闭区间的特性很重要 3)用户明确表示"想只增加一个新的提交" 用户可能正在维护一个需要保持整洁记录的分支,比如生产环境的热修复分支。ta的真实需求应该是:把多个提交的修改效果整体撤销,但在版本历史上只留一条撤销记录。 值得注意的细节是: - 引用提到的区间语法实际是commit1..commit2,不包括commit1但包括commit2 - 需要确认用户是否要撤销连续提交,因为非连续提交需要不同的处理方式 - 如果撤销范围涉及合并提交,需要加-m参数指定主线 准备在回答时强调: 1)核心命令格式 git revert -n 起始提交^..结束提交 2)解释-n参数的作用(不自动提交) 3)解决冲突的必要步骤 4)最终手动提交的技巧 5)特别提醒范围选择的边界问题 考虑到用户可能不熟悉reflog,还应该补充操作失败时的回退方案。最后那个使用ORIG_HEAD的提示很实用,很多用户遇到冲突就手足无措了。 </think>以下是使用 `git revert` 回退多个 commit 的高效方法,**支持单次提交完成回退**: ### 1. 📌 **核心命令(单次提交回退多个 commit)** ```bash git revert -n <commit1>..<commit2> # 左开右闭区间,不包括 commit1 git commit -m "Revert multiple commits" ``` - **关键参数 `-n`**:不自动提交,允许合并多个撤销操作到一次提交中 - **区间范围**:`<commit1>..<commit2>` 表示从 *commit1的下一个提交* 到 *commit2*(含) > 💡 **示例**:撤销最近3次提交(假设当前 HEAD 为 C3): > ``` > git revert -n HEAD~3..HEAD # 范围:C1..C3 (实际回退C2,C3) > git commit -m "Revert C2 and C3" > ``` ### 2. 🔍 **详细操作步骤 1. **确认提交记录**: ```bash git log --oneline # 示例输出: # c3d25e7 (HEAD) C3 # 1b9e0f5 C2 # a5f7d21 C1 # 80b1f0d Base commit ``` 2. **执行区间回退(撤销 C2 和 C3)**: ```bash git revert -n a5f7d21..c3d25e7 # 从C1(不含)到C3(含) ``` 3. **解决冲突(如有)** - 编辑器内处理冲突后标记解决: ```bash git add <冲突文件> git revert --continue # 或直接手动提交 ``` 4. **最终提交**: ```bash git commit -m "Reverted commits C2-C3" ``` ### 3. ️ **关键注意事项 - **区间边界**:`A..B` 等同于 `A的后继提交` 到 `B`(数学区间表示为 $(A, B]$) - **非连续提交**:需分批执行,不支持跨间隔提交 - **合并提交**:需用 `-m` 指定主分支线(如 `git revert -m 1 <merge-commit>`) - **冲突处理**:若中途放弃,使用 `git revert --abort` ### 4. 🔄 **替代方案(不推荐)** ```bash # 逐个回退(生成多个提交记录) git revert HEAD~2 HEAD~1 HEAD # 回退最近3次提交 ``` > ✅ **对比优势**:单次提交方案更整洁,避免污染提交历史[^1][^2] ### 5. 💡 补充技巧 - **可视化选择区间**:使用 `git log --graph` 确认起止 commit - **撤销 revert**:`git reset --hard ORIG_HEAD`(仅限 revert 后未修改的情况) > 📚 操作原理:`git revert` 通过创建*逆向补丁*实现撤销,本质是安全的非破坏性操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值