首页 >> 大全

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

2023-09-19 大全 23 作者:考证青年

前言

在团队开发中,使用 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 338bf3e30983d34074f37a18b3ff80ea9bca75f0
Author: debuginn 
Date:   Tue Sep 21 16:36:09 2021 +0800feat add 2.gocommit 6b166ed34962da08d944e2b1d3f36d9015dd8f35
Author: 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 338bf3e30983d34074f37a18b3ff80ea9bca75f0
Author: debuginn 
Date:   Tue Sep 21 16:36:09 2021 +0800feat add 2.gocommit 6b166ed34962da08d944e2b1d3f36d9015dd8f35
Author: debuginn 
Date:   Tue Sep 21 16:35:16 2021 +0800feat add 1.go

revert和reset_

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

2 使用git reset --hard命令操作:

  demo git:(master) git reset --hard 6b166ed34962da08d944e2b1d3f36d9015dd8f35
HEAD 现在位于 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),包复用 0
To 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

2 使用git 命令重做操作:

  demo git:(master) git revert 338bf3e30983d34074f37a18b3ff80ea9bca75f0
删除 2.go
[master ef822b7] Revert "feat add 2.go"
1 file changed, 9 deletions(-)delete mode 100644 2.go

再次查看 git log :

commit ef822b71c33a2dbbdaa350fddcfa14e8fc55e543 (HEAD -> master, origin/master)
Author: debuginn 
Date:   Tue Sep 21 17:12:00 2021 +0800Revert "feat add 2.go"This reverts commit 338bf3e30983d34074f37a18b3ff80ea9bca75f0.commit b0ef8f9125226af8f06ff1aba7c1f1fc83adea9b
Author: debuginn 
Date:   Tue Sep 21 17:05:39 2021 +0800feat add 3.go

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

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

总结

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

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了