Git 命令 reset 和 revert 的区别【笔记】

前言
在团队开发中,使用 Git 作为版本开发工具,可以便捷地协同多人管理并行开发,但是由于自己或者其他人代码提交污染了远程分支,就需要对远程代码进行恢复操作,Git 提供了 reset 和两种命令来进行恢复操作,这两种操作效果是截然不同的,不太清楚这个原理的同学需要了解一下,以免在实际的开发过程中翻车,导致线上远程仓库不可逆转的操作 。
首先从英文释义来讲,reset 是重置的意思, 是恢复、还原的意思,作为 Coder ,第一感觉 reset 的效果比更猛一些,实际情况也的确如此,让我们一起探讨一下吧 。
git 提交时间线
背景
Git 的每一次提交都是一次 ,上图可以看到在时间线上有三次提交,此时 HEAD 指向 main 分支,main 分支又指向最新的。
实践出真理
为了直接明白的了解其原理,我这里在上创建一个空白的仓库,按照上图创建三次提交:
commit b0ef8f9125226af8f06ff1aba7c1f1fc83adea9b (HEAD -> master, origin/master)Author: debuginn Date:Tue Sep 21 16:36:39 2021 +0800feat add 3.gocommit 338bf3e30983d34074f37a18b3ff80ea9bca75f0Author: debuginn Date:Tue Sep 21 16:36:09 2021 +0800feat add 2.gocommit 6b166ed34962da08d944e2b1d3f36d9015dd8f35Author: debuginn Date:Tue Sep 21 16:35:16 2021 +0800feat add 1.go
Git Reset
git reset的作用是将 HEAD 指向指定的版本上去:
git reset
1 使用git log查看提交记录:
commit b0ef8f9125226af8f06ff1aba7c1f1fc83adea9b (HEAD -> master, origin/master)Author: debuginn Date:Tue Sep 21 16:36:39 2021 +0800feat add 3.gocommit 338bf3e30983d34074f37a18b3ff80ea9bca75f0Author: debuginn Date:Tue Sep 21 16:36:09 2021 +0800feat add 2.gocommit 6b166ed34962da08d944e2b1d3f36d9015dd8f35Author: debuginn Date:Tue Sep 21 16:35:16 2021 +0800feat add 1.go

Git 命令 reset 和 revert 的区别【笔记】

文章插图
这里可以看到我们提交了三次记录,我们现在想恢复到第一次提交的时候 。
2 使用git reset --hard命令操作:
demo git:(master) git reset --hard 6b166ed34962da08d944e2b1d3f36d9015dd8f35HEAD 现在位于 6b166ed feat add 1.go
再次查看git log:
commit 6b166ed34962da08d944e2b1d3f36d9015dd8f35 (HEAD -> master)Author: debuginn Date:Tue Sep 21 16:35:16 2021 +0800feat add 1.go
此时我们可以看到已经恢复到了第一次提交代码的时候,目前我们是使用git reset --hard的方式,其实这里存在着三种方式,TODO 下一篇 git 操作讲一下 。
这时候我们只是讲本地的 HEAD 指向了 main 分支的1,但是远程并没有变更,此时需要强行推一下就可以了 。
3 使用git push -f强行推送到远程:
demo git:(master) git push -f总共 0(差异 0),复用 0(差异 0),包复用 0To github.com:debuginn/demo.git+ b98f95e...6b166ed master -> master (forced update)
此时我们可以看到远程也没有了我们之前提交的三次记录而是只有第一次的提交记录 。
警告
在团队合作的共同操作一个仓库的时候, git reset 命令一定要慎重使用,在使用的时候一定要再三确认其他同学的代码是否会被重置操作而导致代码丢失,导致一些提交记录的丢失,这些都是不可逆的,一定要慎重 。
Git
git 是用来重做某一个提交的内容,在我们原始的提交之中,我们会发现分支上面有创建了一个新的提交,而此时我们对于想重做的某个提交的内容都不存在了:
git
1 使用git log查看提交记录:
Author: debuginn Date:Tue Sep 21 16:36:39 2021 +0800feat add 3.go