美文网首页
git 回滚 reset 与revert

git 回滚 reset 与revert

作者: 今夜秋风和 | 来源:发表于2022-05-14 17:32 被阅读0次

一.产生背景

绝大部分的情况下我们都会使用git 来进行版本库的管理,某些时候因为一些误操作,我们会对其中的一个版本进行回滚, git 提供了两种回滚方案 reset 与revert 操作;

二.使用以及区别

git reset

  可翻译为重做的意思,git reset 命令会把版本库和工作目录改变为已知状态,具体来说,它会调整HEAD 引用指向给定的提交;
 git reset 有三种主要选项: --soft,--mixed,--hard;
 --soft 会将HEAD引用指向给定提交,索引和工作目录的内容保持不变,具有最小影响;
--mixed (git reset 默认方式)会将HEAD引用指向给定提交,索引内容也跟着改变,工作目录内容保持不变。该命令将索引变成刚刚暂存该提交全部变化时的状态,同时会显示工作目录h还有什么修改;
--hard 会将HEAD引用指向给定提交,索引内容也跟着改变,工作目录也会随之修改(该选项是一个危险操作,意味着如果新版本有新的修改,通过使用git reset --hard commit 本地工作目录会丢失这些修改)

通过实际的例子可观测下,目前分别增加了3个文件,对应3个commitId,“add test3” 为当前最新提交,假设发现最新提交("add test3")有问题,想回滚到 "add test1" 这个时刻


01.jpeg
  1. 使用git reset --soft 5feef0f8ced90e27e9248759a03b765153db2e40 :


    03.jpeg
    04.jpeg

可以看到head 指针指向了 “add test1” 的本次提交,工作区,暂存区保留了之前添加的索引文件,如果我们不想要 "add test3"最后一次的变动提交文件,可以通过git restore 命令 将对应的文件移除暂存区,然后git push推送;
2.重新模拟添加文件的产生的3个commitId 操作通过git log 查看:


05.jpeg

还是刚才的回退到"add test1"的commitId ,使用git reset --mixed 5feef0f8ced90e27e9248759a03b765153db2e40 ,


06.jpeg
git status 查看当前暂存区状态:
07.jpeg
查看本地工作区:
08.jpeg

head 指针指向了 "5feef"的commitId,暂存区的索引文件也发生了变化,工作区的文件并未发生变化;

3.最后模拟三个添加文件的commitId


09.jpeg

使用 git reset --hard 5feef0f8ced90e27e9248759a03b765153db2e40


11.jpeg
可以看到,这是最危险的操作,导致本地工作区,暂存区文件都会丢失;

git revert

用来产生一个新提交来抵消了给定提交的影响,它方便管理git 的版本变化链路,常用来撤销在历史记录中某个提交的影响;

通过增加3个文件的版本


11.jpeg

假设历史版本"add test1" 有问题,不想要这个最早的版本,
执行git revert 5feef0f8ced90e27e9248759a03b765153db2e40,可以看到,git 会生成一个新commitId (它包含撤销 "add test1" 版本的提交,并且保留后续新版本的提交),,当前head 指针指向最新的commitId


12.jpeg
本地工作区以及暂存区:
13.jpeg

总结

相同点:

都是作为git 回滚的一种选择方案;

不同点:

 1.git reset 操作,会通过修改head 指针指向要回滚到的commitId ,通过在工作区修正错误版本的文件,然后commit,或者如果不想要错误版本的文件,可以移除掉,再commit,相对来说,需要用户来关注并处理错误的版本文件,并且没有git 版本追踪的链路;
 2. git revert 操作,通过生成新的commitId (它会全部撤销 错误版本的提交 且保留其他版本的文件),在git 版本管理上,便于追溯,在日常操作过程中更为方便;

相关文章

  • git reset --soft,git reset --har

    git reset与git revert的区别 git revert是用一次新的commit来回滚之前的commi...

  • Git reset、revert、rebase的简单使用

    Git reset、revert、rebase的简单使用 回滚提示 本地或者自己单独的仓库使用reset 或者re...

  • git 回滚 reset 与revert

    一.产生背景 二.使用以及区别 git reset 通过实际的例子可观测下,目前分别增加了3个文件,对应3个com...

  • git revert 与 git reset

    Git版本回滚之 git revert 与 git reset 在使用 git 的时候,如果错误push之后,经常...

  • git回退到某个版本

    方法一 git reset commit_id 这命令会丢掉回滚的提交记录 方法二 git revert comm...

  • 2019-01-19

    git reset --hard xxx ,git reset --soft xxx 与git revert xx...

  • Exe.3 task 3rd

    关于git revert 、git reset --hard 与 git reset --soft 之间的区别与作...

  • Git revert 代码回滚

    没有git rollback,git revert 即使回滚代码。 git revert 撤销 某次操作,此次操作...

  • git复杂操作

    【问题】回滚已合入的提交【答案】有三种方式,用git revert或者git reset, 建议使用方法1。1.g...

  • git reset 和git revert

    git reset 和git revert 的作用 它们二者都是属于回滚代码是在将本地文件传送到远程端出现错误时起...

网友评论

      本文标题:git 回滚 reset 与revert

      本文链接:https://www.haomeiwen.com/subject/rtsqurtx.html