git revert 与 git reset

作者 : 开心源码 本文共1333个字,预计阅读时间需要4分钟 发布时间: 2022-05-11 共74人阅读

Git版本回滚之 git revert 与 git reset

在用 git 的时候,假如错误push之后,经常会回滚版本。

git的回滚有两种方式:

  • revert命令:这种方式,是使用一种反向的 push 来重新提交一次。git中能看到操作记录。

  • reset命令:这个命令,是一种重置。即错误提交了,我要删除这个提交记录。也能实现回滚。

两个命令的比照:

revert 和 reset 看上去达到的效果是一样的,但其实是完全不同的过程。

  1. 假如已经 push 到线上代码库, reset 删除指定 commit 以后,再 git push 可可以导致一大堆的冲突。但是 revert 并不会。

  2. 假如在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码仍然会出现在历史分支里。但是 revert 反向提交的commit 并不会出现在历史分支里。

  3. reset 是在正常的 commit 历史中,删除了指定的 commit,这时 HEAD 是向后移动了,而 revert 是在正常的 commit 历史中再 commit 一次,只不过是反向提交,他的 HEAD 是一直向前的。

git reset 常使用参数的了解

从上面这张图,能直观的理解 git 的工作流程。

  • 最初的状态是我们正在书写代码,这个状态对应图中的 Working diretory。这个时刻,我们的代码是独立的,跟 git 没有一点关系。
  • 随后,我们把当前编辑的 A 文件 add 到 git 中,这个时候就跟 git 发生了关系,git 接收了我们的代码。而后把这个文件存入了自己的暂存区 stage ,后面我们对这个文件的任何更改 ,git 都会知晓。这个状态对应图中的 Stage/Index。
  • 我们把写好的 A 文件 commit 到 git ,这就有了一次提交历史,对应图中的 History。在 git 中只需 commit 过的文件,都有各种方式能恢复,基原本说,就是不会丢了。

随着项目的进行,我们发现代码写的不好,需要回退到上一次的提交,我们有几个命令能选择。

常见以下三个命令:

  • git reset --hard
  • git reset --soft
  • git reset --mixed

git reset –hard

这个命令非常危险 ,是 git 中少有的几个会丢失信息的操作。它会把回退点之前的所有信息都删掉,一个不留,干干净净。
举个例子:
现在我把 A 文件修改了两次,到了 C 状态 ,并且已提交。
那么我的分支指针是指向 C , 当前文件编辑的状态也是在 C

   (F)A-B-C    ↑  master

我输入了git reset --hard,结果会变成:

 (F)A-B  ↑master

对的, C 状态彻底没有,再也找不回来。所以,没事不要使用这个命令。

git reset –soft

同样是这个状态:

   (F)A-B-C    ↑  master

我输入了git reset --soft,结果是:

 (F)A-B-C  ↑master

文件状态与分支的指针都指向上一个提交,C 还是在的,只是没显示。

git reset –mixed

依然是这个场景:

   (F)A-B-C    ↑  master

我输入了 git reset --mixed,结果是:

   (F)A-B-C  ↑master

分支指针指向上次提交点,但是文件状态还是在当前文件 C ,我看到的现象就是 C 文件还在,但是没有 add ,是红色的。

由此能看出,三个命令中 mixed 是最好的回退解决方式,其实这也是 git reset 的默认参数。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » git revert 与 git reset

发表回复