当前位置:   article > 正文

git reset 命令详解 git revert命令详解。

git reset

在这里插入图片描述

reset命令

介绍

git reset 命令格式为:
git reset [ --soft | --mixed | --hard ] [< commitid >]
在git的这些命令中git reset是最长常用的,也是最危险的最容易被误用的。它的主要参数是:soft,mixed,hard它们告诉git,当执行reset是,要对index和working copy做什么。

参数

soft:
–soft参数只将其它的commit重置到你选定的HEAD,index和working copy中的数据不变。
mixed:
–mixed参数是将HEAD和index重置到你选定的HEAD,而working copy不变。
hard:
–hard是将HEAD,index,working copy同时改变到你规定的commit上。
注意:commitid是每次你要回退到的那个commit的id,它可以通过git log获取。

使用

commit还没有push

在这里插入图片描述

可以看到我新进行了一次提交,但是还没有push。此时我发现,我提交错了,要撤回这次提交。
执行:

git log
  • 1

在这里插入图片描述
要退回到错误提交的上一次提交。

# 什么都不写 默认 --mixed
git reset 0997fab2fa0bfa468cc5c55e56d7df0491869c3a
  • 1
  • 2

在这里插入图片描述
可以看到,执行了命令之后版本退回去了,但是修改的内容还在。
如果不想要修改的内容了

# --hard 丢弃修改的内容
git reset --hard 0997fab2fa0bfa468cc5c55e56d7df0491869c3a
  • 1
  • 2

在这里插入图片描述
退回到了指定版本,修改的内容也没了。

commit 已经push

回退的方式同上,执行完上面指定命令后 可以看到,线上代码还在错误提交那里,本地代码再18:28提交的那一次那里。右下方出现小蓝点,说明线上代码比本地代码更新。

在这里插入图片描述
此时如果你push,会提示:
在这里插入图片描述
点击merge就又回去了,完全没退回去。
此时应该执行:

# 有可能会让你输入用户名、密码。
git push --force
  • 1
  • 2

在这里插入图片描述

在这里插入图片描述
这样远程代码也就被回退了。

补救

如果我们通过git reset --hard将版本回退到之前的版本了,那我们还是可以补救的,先通过git reflog命令,找到要回退的commitId,然后通过命令:git reset --hard commitId来恢复。

git revert命令

revert说明

  由于某些文章说的说法可能不是很明确,所以导致一部分小袁同志们对revert有一定的误解,一开始我也很难理解revert到底是干什么的。毕竟用于版本回退的都已经有git reset了,为什么还要再出一个git revert?
  其实呢,revert它不会想reset一样”带你回到“那个你指定的提交,并假装那个提交之后的后续提交都没有发生。它是用于单个提交的逻辑否定 -并且单独提交- 保留后续提交

举例

比如:
我们有一个文件里面写了:

提交A
提交B
提交C
提交D
  • 1
  • 2
  • 3
  • 4

第一次我们把它改成:

提交A
2提交
提交C
提交D
  • 1
  • 2
  • 3
  • 4

并提交 假设commitId是tijiao1

第二次我们把它改成:

提交A
2提交
提交C
4提交
  • 1
  • 2
  • 3
  • 4

并提交 假设commitId是tijiao2

之后我们进行revert:
git revert tijiao1
此时结果会变成:

提交A
提交B
提交C
4提交
  • 1
  • 2
  • 3
  • 4

所以我们要知道revert是只撤回指定的提交,并保留后续的提交
如果你想让版本直接回退到tijiao1并且取消后续所有提交那你应该使用reset

命令

revert分两种,因为commit分两种。
一种是常规的 commit,也就是使用 git commit 提交的 commit;
另一种是 merge commit,在使用 git merge 合并两个分支之后,你将会得到一个新的 merge commit,merge commit 和普通 commit 的不同之处在于 merge commit 包含两个 parent commit,代表该 merge commit 是从哪两个 commit 合并过来的。
常规的revert:

//撤回指定的任意提交
git revert commitId
//撤回最后一次提交
git revert HEAD
//撤回倒数第二次提交
git revert HEAD^
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

merge commit 的revert:加上-m表示撤回哪一个分支的。它的数据是1或2.
在这里插入图片描述

//保留第一个分支为主线
git revert -m 1 commitId
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/631223
推荐阅读
相关标签
  

闽ICP备14008679号