我在这篇文章中介绍了如何使用git reset命令回退版本。
使用git reset回退版本_new9232的博客-CSDN博客_git 回退到最新版本
但是这种方法只适用于同一个分支只有一个人在修改代码。如果同一个分支有多人修改代码时,那这个命令就不适用了。为什么呢?我通过一个简单的例子说明下。
1、git reset弊端
tom和jack两个人现在拉取的是同一个分支的代码,提交记录是下面这样的。
然后tom新增了一个four.txt文件并推送到了远程仓库。jack同时拉取了远程仓库的代码,这时tom和jack的提交记录变成了这样
然后呢,tom发现提交的代码有问题,于是进行了版本回退,并强制推送到了远程仓库。
这个时候就出问题了,由于jack本地仓库的代码比远程仓库代码新,所以jack此时拉取代码的话,是不能拉到tom回退后的代码的。
我们看到,虽然jack进行了拉取,但第四次提交记录依旧在
而且如果jack有了新的修改进行了提交,tom回退的版本又会重新出现
tom现在进行拉取
可以看到,tom回退的版本又出现了。
所以说,多人使用同一分支开发时,那么使用git reset命令进行版本回退就没用了。
2、git revert登场
同样的,tom和jack拉取同一分支的代码,提交记录如下
然后tom新增了一个four.txt文件并推送到了远程仓库。jack同时拉取了远程仓库的代码,这时tom和jack的提交记录变成了这样
接下来了,tom发现four.txt文件提交错了,于是进行了版本回退并强制推送到了远程仓库。
可以看到,回退到了 "第四个文件提交" 这个commit之前的状态了,four.txt文件已经没有了。
而且这个时候,jack再去拉取
可以看到,four.txt也已经不见了。
总结
使用git reset回退版本时,可以看到你的提交记录就没了,而使用git revert回退版本时,提交记录依旧在,它其实相当于重新做了一个版本,但是和之前的版本一样。
我画了个示意图,应该能看明白这两个命令的区别了。
由此,如果同一分支只有你一个人在进行开发,并且回退记录不想保留的话,可以使用git reset进行版本回退。如果同一分支有多人开发时,或者你想保留回退记录的话,就使用git revert