git reset vs git revert

1.前言

在团队开发中,使用 Git 作为版本开发工具,可以便捷地协同多人管理并行开发,但是由于自己或者其他人代码提交污染了远程分支,就需要对远程代码进行恢复操作,Git 提供了resetrevert两种命令来进行恢复操作,这两种操作效果是截然不同的,不太清楚这个原理的同学需要了解一下,以免在实际的开发过程中翻车,导致线上远程仓库不可逆转的操作。

首先从英文释义来讲,reset是重置的意思,revert是恢复、还原的意思。

2.背景

在这里插入图片描述
Git 的每一次提交都是一次commit,上图可以看到在时间线上有三次提交,此时HEAD指向main分支,main分支又指向最新的Commit3

HEAD是指向当前分支的最新提交的指针,可以在任意分支进行切换;

main(master)分支,是一个git代码仓库的主分支也是默认分支;

commit每一次提交代码都会产生一个commit id来标识工作区的变更与改动。

3.git reset

在github上创建一个空白的仓库,按照上图创建三次提交:
在这里插入图片描述
git reset的作用是将HEAD指向指定的版本上去:
在这里插入图片描述
使用git log查看提交记录:
在这里插入图片描述
这里可以看到我们提交了三次记录,我们现在想恢复到第一次commit 提交的时候。

使用git reset --hard命令操作:
在这里插入图片描述
此时我们可以看到已经恢复到了第一次提交代码的时候,目前我们是使用git reset --hard的方式,其实这里存在着三种方式,详情见我写的文章https://blog.csdn.net/fageaaa/article/details/146107438中的第10条。

这时候我们只是讲本地的 HEAD 指向了main 分支的 commit 1,但是远程并没有变更,此时需要强行推一下就可以了。

git push -f

此时我们可以看到远程也没有了,我们之前提交的三次记录而是只有第一次的提交记录。

在团队合作的共同操作一个仓库的时候, git reset 命令一定要慎重使用,在使用的时候一定要再三确认其他同学的代码是否会被重置操作而导致代码丢失,导致一些提交记录的丢失,这些都是不可逆的,一定要慎重

4.git revert

git revert是用来重做某一个commit 提交的内容,在我们原始的提交之中,我们会发现分支上面有创建了一个新的 commit 提交,而此时我们对于想重做的某个 commit 提交的内容都不存在了:
在这里插入图片描述
在github上创建一个空白的仓库,按照上图创建三次提交:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行命令

git revert 8a189dc468ff360902238fb75858a5f520e57499

在这里插入图片描述
:wq退出保存,再次git log:
在这里插入图片描述
在这里插入图片描述
可以看到111提交记录中的index1.txt文件已经被删除了。但此时有4条提交记录。

然后强制提交到远程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.总结

git resetgit revert都是属于重新恢复工作区以及远程提交的方式,但这两种操作有着截然不同的结果:

  • git reset是将之前的提交记录全部抹去,将HEAD指向自己重置的提交记录,对应的提交记录都不复存在;
  • git revert操作是将选择的某一次提交记录重做,若之后又有提交,提交记录还存在,只是将指定提交的代码给清除掉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值