使用git revert回退版本

我在这篇文章中介绍了如何使用git reset命令回退版本。

使用git reset回退版本_new9232的博客-CSDN博客_git 回退到最新版本

但是这种方法只适用于同一个分支只有一个人在修改代码。如果同一个分支有多人修改代码时,那这个命令就不适用了。为什么呢?我通过一个简单的例子说明下。

1、git reset弊端

tom和jack两个人现在拉取的是同一个分支的代码,提交记录是下面这样的。

然后tom新增了一个four.txt文件并推送到了远程仓库。jack同时拉取了远程仓库的代码,这时tom和jack的提交记录变成了这样

使用git revert回退版本_第1张图片 

 然后呢,tom发现提交的代码有问题,于是进行了版本回退,并强制推送到了远程仓库。

使用git revert回退版本_第2张图片

这个时候就出问题了,由于jack本地仓库的代码比远程仓库代码新,所以jack此时拉取代码的话,是不能拉到tom回退后的代码的。

 使用git revert回退版本_第3张图片

我们看到,虽然jack进行了拉取,但第四次提交记录依旧在 

而且如果jack有了新的修改进行了提交,tom回退的版本又会重新出现

使用git revert回退版本_第4张图片

 tom现在进行拉取

使用git revert回退版本_第5张图片

可以看到,tom回退的版本又出现了。

所以说,多人使用同一分支开发时,那么使用git reset命令进行版本回退就没用了。

2、git revert登场 

同样的,tom和jack拉取同一分支的代码,提交记录如下

使用git revert回退版本_第6张图片

然后tom新增了一个four.txt文件并推送到了远程仓库。jack同时拉取了远程仓库的代码,这时tom和jack的提交记录变成了这样

使用git revert回退版本_第7张图片

 接下来了,tom发现four.txt文件提交错了,于是进行了版本回退并强制推送到了远程仓库。

使用git revert回退版本_第8张图片

可以看到,回退到了 "第四个文件提交" 这个commit之前的状态了,four.txt文件已经没有了。

而且这个时候,jack再去拉取

使用git revert回退版本_第9张图片 

可以看到,four.txt也已经不见了。

总结 

使用git reset回退版本时,可以看到你的提交记录就没了,而使用git revert回退版本时,提交记录依旧在,它其实相当于重新做了一个版本,但是和之前的版本一样。

我画了个示意图,应该能看明白这两个命令的区别了。

使用git revert回退版本_第10张图片

 使用git revert回退版本_第11张图片

 

由此,如果同一分支只有你一个人在进行开发,并且回退记录不想保留的话,可以使用git reset进行版本回退。如果同一分支有多人开发时,或者你想保留回退记录的话,就使用git revert

你可能感兴趣的:(git,git)