GIT-优雅地回滚错误提交

GIT-优雅地回滚错误提交

背景:
  1. 日常开发中,偶尔会因为粗心而将代码提交到错误的分支上且推送到了远程。虽说这种情况可以通过写清单的方式来避免,但是如果真的遇到了,那该怎么办呢?下面写好了两种应对方式
必备知识:
  1. GIT 有两种回退方式,分别是 git resert gitrevert
  2. git resert 方式,该方式会导致分支数据丢失,所以称它为向后回退。该方式有三种回退模式,分别是强制模式git reset --hard、混合模式git reset --mixed、软合并模式git reset --soft
  3. git revert 方式,它会创建新的分支,所以称它为向前回退
解决原理:
  1. 将错误的提交回退到工作区,接着将修改的数据贮藏起来,最后切换分支并弹出来
情况分析:
情况一:本地的提交没有推送到远程,采用 reset 回滚
  1. 采用 reset 的’混合模式’进行回退,修改会退回工作区
  2. 我们将其存到贮藏中,切换到功能分支并弹出贮藏的内容
情况二:本地的提交已经推送到远程,采用 revert 回滚
  1. 采用 revert 回滚错误的提交并推送到远程。此步骤就已经完成了代码回退,但是为了拿回我们修改过的代码,就还需要进行下面的步骤(此时分支向前走了)
  2. 采用 reset 的 强制模式 向后回退到错误那次提交
  3. 再采用 reset 的混合模式回退到错误提交的上一次。此时工作区保存着错误提交的所有修改代码
  4. 将错误提交的代码保存到贮藏中,切换到功能分支并弹出即可。
实战例子:
例子一:(未推送远程的情况)
echo '111' > '1.txt'
git add . 
git commit -m'第一次提交'
echo '222' > '2.txt'
git add . 
echo '333' > '3.txt'
  1. 强制模式下(git reset --hard): 相当于节点过后,什么都没做。 1.txt2.txt3.txt 都没有了
  2. 混合模式下(git reset --mixed): 把回退点以后的修改都退回了工作区。 1.txt2.txt3.txt 的修改都保留到了工作区
  3. 软合并模式下(git reset --soft): 把回退点以后操作回退到工作区(未进行任何操作)或者缓存区(add) 1.txt2.txt去缓存区,3.txt 在工作区
例子二:(推送远程的情况)
echo '111' > '1.txt'
git add . 
git commit -m'提交 1.txt 文件'
echo '222' > '2.txt'
git add . 
git commit -m'提交 2.txt 文件'
git push 
  1. 回滚第一次提交,那么 1.txt 文件就会被删除, 2.txt 文件保留
  2. 如果第一次提交的文件在后续的提交中有操作,此时就会产生冲突,解决冲突即可。
温馨提示:
  1. revert是回滚某一次提交,而reset是回滚到某次提交,及从当前分支一直回滚到选定的分支
  2. 推送到远程后采用 revert,目的在于:①我们可能没有采用 reset 强行回退远程分支的权利;②即使我们有权利,但这期间可能存在其他同事的提交,那我们就可能重置到其他同事的提交;③采用 revert可以看到历史的每一个版本
  3. 必须学习搞懂reset的三种模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值