您的位置 首页 > 德语词汇

reset是什么意思?用法、例句,Git 命令 reset 和 revert 的区别

本篇文章给大家谈谈reset是什么意思?用法、例句,以及Git 命令 reset 和 revert 的区别对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

友情提示:此篇文章大约需要阅读9分钟23秒,不足之处请多指教,感谢您的阅读。订阅本站

reset是什么意思?用法、例句,Git 命令 reset 和 revert 的区别

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

首先从英文释义来讲,reset是重置的意思,revert是恢复、还原的意思,作为Coder,第一感觉reset的效果比revert更猛一些,实际情况也的确如此,让我们一起探讨一下吧。

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

为了直接明白的了解其原理,我这里在github上创建一个空白的仓库,按照上图创建三次提交:

commitb0ef8f9125226af8f06ff1aba7c1f1fc83adea9b(HEAD->master,origin/master)\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:36:392021+0800\n\nfeatadd3.go\n\ncommit338bf3e30983d34074f37a18b3ff80ea9bca75f0\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:36:092021+0800\n\nfeatadd2.go\n\ncommit6b166ed34962da08d944e2b1d3f36d9015dd8f35\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:35:162021+0800\n\nfeatadd1.goGitReset

gitreset的作用是将HEAD指向指定的版本上去:

1使用gitlog查看提交记录:

commitb0ef8f9125226af8f06ff1aba7c1f1fc83adea9b(HEAD->master,origin/master)\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:36:392021+0800\n\nfeatadd3.go\n\ncommit338bf3e30983d34074f37a18b3ff80ea9bca75f0\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:36:092021+0800\n\nfeatadd2.go\n\ncommit6b166ed34962da08d944e2b1d3f36d9015dd8f35\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:35:162021+0800\n\nfeatadd1.go

这里可以看到我们提交了三次记录,我们现在想恢复到第一次commit提交的时候。

2使用gitreset--hard命令操作:

?demogit:(master)gitreset--hard6b166ed34962da08d944e2b1d3f36d9015dd8f35\nHEAD现在位于6b166edfeatadd1.go

再次查看gitlog:

commit6b166ed34962da08d944e2b1d3f36d9015dd8f35(HEAD->master)\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2116:35:162021+0800\n\nfeatadd1.go

此时我们可以看到已经恢复到了第一次提交代码的时候,目前我们是使用gitreset--hard的方式,其实这里存在着三种方式,TODO下一篇git操作讲一下。

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

3使用gitpush-f强行推送到远程:

?demogit:(master)gitpush-f\n总共0(差异0),复用0(差异0),包复用0\nTogithub.com:debuginn/demo.git\n+b98f95e...6b166edmaster->master(forcedupdate)

github

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

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

gitrevert是用来重做某一个commit提交的内容,在我们原始的提交之中,我们会发现分支上面有创建了一个新的commit提交,而此时我们对于想重做的某个commit提交的内容都不存在了:

1使用gitlog查看提交记录:

Author:debuginn<debuginn@icloud.com>\nDate:TueSep2116:36:392021+0800\n\nfeatadd3.go

2使用gitrevert命令重做操作:

?demogit:(master)gitrevert338bf3e30983d34074f37a18b3ff80ea9bca75f0\n删除2.go\n[masteref822b7]Revert"featadd2.go"\n1filechanged,9deletions(-)\ndeletemode1006442.go

再次查看gitlog:

commitef822b71c33a2dbbdaa350fddcfa14e8fc55e543(HEAD->master,origin/master)\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2117:12:002021+0800\n\nRevert"featadd2.go"\n\nThisrevertscommit338bf3e30983d34074f37a18b3ff80ea9bca75f0.\n\ncommitb0ef8f9125226af8f06ff1aba7c1f1fc83adea9b\nAuthor:debuginn<debuginn@icloud.com>\nDate:TueSep2117:05:392021+0800\n\nfeatadd3.go

可以看到当前已经重做了一下commit2的提交,已经讲2.go删除掉了。

可以看到github上面有了四次提交记录。

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

选择合适的方式回滚自己的代码在团队合作中很重要,但是要慎重操作,不要丢失代码哦。

好了,文章到此结束,希望可以帮助到大家。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023