Git代码回滚方法

一、撤销提交

revert介绍

1、revert的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险

2、revert可以抵消上一个提交,那么如果想要抵消多个需要执行 git revert 倒数第一个commit id 倒数第二个commit

3、这个就常用于当你提交了一次commit之后发现提交的可能有问题就可以用到revert

4、还有一种情景是已经有很多人提交过代码,但是想改之前的某一次commit记录又不想影响后面的也可以使用revert,他会把你后面提交的记录都放到工作区只是合并的时候需要注意一点

一种常见的场景是,提交代码以后,你突然意识到这个提交有问题,应该撤销掉,这时执行下面的命令就可以了。

git revert HEAD

上面命令的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险。

git revert 命令只能抵消上一个提交,如果想抵消多个提交,必须在命令行依次指定这些提交。比如,抵消前两个提交,要像下面这样写。

$ git revert 98b8b6d

git revert 命令还有两个参数。

  • --no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息。

  • --no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。

二、丢弃提交

reset介绍

1、reset的作用是当你希望提交的commit从历史记录中完全消失就可以用

2、比如你在master分支提交了A-->B-->C提交了三个记录,这个时候如果C记录有问题你想回滚到B就可以用git reset进行

3、这个命令大概率的情况都是用在我们主分支的,因为我们上线的分支一般是master分支然后从develop进行功能开发

4、开发完成之后将分支合并到master,如果在上线之前发现合并的分支用问题可以将develop合并过来的分支进行回滚

5、说白了就是取消develop的本次合并

6、但是有一种情况就是协作开发的时候大家都合并到master之后就不能用reset强行回滚commit因为这样会把其他人的提交记录给冲掉,这时候就可以用revert来进行操作我们在下面说

如果希望以前的提交在历史中彻底消失,而不是被抵消掉,可以使用 git reset 命令,丢弃掉某个提交之后的所有提交。

$ git reset [提交代码hash]
$ git reset 69fde2c#表示代码回撤到这次提交

注意:

重点来了我们使用git reset 69fde2c进行回滚,这个时候查看log记录发现最后一条新增c记录没有了,这里还有个问题如果直接使用git push推送会有以下提示。

 这是因为本地的记录因为我们的回滚已经落后于仓库的代码了,这个使用需要使用

git push \-f

进行强制提交。

执行 git reset 命令之后,如果想找回那些丢弃掉的提交,可以使用 git reflog 命令,具体做法参考这里。不过,这种做法有时效性,时间长了可能找不回来。

三、替换上一次提交

提交以后,发现提交信息写错了,这时可以使用 git commit 命令的 --amend  参数,可以修改上一次的提交信息。

$ git commit --amend -m "Fixes bug #42"

它的原理是产生一个新的提交对象,替换掉上一次提交产生的提交对象。

这时如果暂存区有发生变化的文件,会一起提交到仓库。所以,--amend 不仅可以修改提交信息,还可以整个把上一次提交替换掉。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值