git reset 代码回退

日常写代码中,少不了撤销当前编辑的代码、撤销某次提交的代码、撤销正在合并或已经合并的代码,这就需要用到 git 中的某些方法了。下面是我遇到的问题跟用到的一些方法记录。

git reset 指代码回退到某个版本状态。其实质是修改当前 HEAD 的位置到指定回退版本的位置,所以夹在当前跟回退指定的版本之间的版本会一起回退。

git reset --mixed HEAD^
HEAD^:指定位置参数,必写。
      HEAD^ -- 最后一次 commit 版本;
      HEAD  -- 当前未 commit 版本(即工作区或已暂存的代码);
      commit_id -- 某次提交的 commit id 版本;
--mixed:回退的程度参数,选填。
     --hard -- 撤销 commit、撤销 add、撤销代码改动;
     --mixed -- 撤销 commit、撤销 add、不撤销代码改动;-- 默认参数
     --soft -- 撤销 commit、不撤销 add、不撤销代码改动;

场景一:撤销当前编辑的代码,即未 commit 代码,(包括当前正在合并的代码)

git reset --hard HEAD
git merge --abort // 丢弃正在合并的代码(只能用在正在合并的代码)

场景二:提交之后才意识到有个错误,于是把代码回退到之前编辑状态

git reset --mixed HEAD^ // 相当回退到之前未提交未暂存的代码状态

场景三:撤销第 N 次前的提交

假如 N 次的提交都可以不要了,就能用 git reset --hard commit_id;
假如只是第 N 次提交的代码不要,则需另个方法 git revert,反做某一次提交。
git revert commit_id – 新增一次新的提交,代码操作跟 commit_id 这次相反,即撤销指定版本的提交了。

注意:
git revert 是新增一次操作达到撤销某次提交的目的,其提交记录能被查询到,git reset 是通过回退到某个版本位置来达到撤销目的,其操作记录跟被回退的提交记录都不能被查询到(实质是 HEAD 位置的改变)。看似 git revert 这方法更科学,不会抹去任何提交记录,但网上看到不少提示 git revert 坑的出现,所以这方法慎用。

场景四:撤销已经 push 到远程的上次提交

git reset --hard HEAD^ // 本地先撤销上次提交
git pull --f origin xxx // reset 干脆利落,远程的 reset 需注意,清楚是否会回退别人 push 的代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值