git reset版本回退后悔药(图文例子)

目录

    • 版本回退
      • 前期测试样例准备
      • [git reset --soft 不撤销add,撤销commit,保留修改](#git reset --soft 不撤销add,撤销commit,保留修改)
      • [git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改](#git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改)
      • [git reset --hard 撤销add,撤销commit,不保存修改](#git reset --hard 撤销add,撤销commit,不保存修改)
      • [git reset --merge 取消合并](#git reset --merge 取消合并)
      • [git reset --keep 不撤销add,撤销commit,根据情况判断区别与mixed](#git reset --keep 不撤销add,撤销commit,根据情况判断区别与mixed)
    • 总结

欢迎关注 『发现你走远了』 博客,持续更新中
欢迎关注 『发现你走远了』 博客,持续更新中

版本回退

自从通过ide插件去实现之后 git命令统统忘光了~

但是面试要求会考`还是记录一下吧~

前期测试样例准备

我们修改了txt的内容并进行一次提交

html 复制代码
git add .
git commit

然后再次修改txt

可以发现此时因为没有add,出现了被追踪但是没有提交的文件红色警告

html 复制代码
git status

查看提交历史看到确实增加了提交历史总共有3次,第一次是一开始时候的默认提交,第二次提交的哈希值100c6c8ce803b4067f65f7fb13a2723ee30db16c

html 复制代码
git log

git reset --soft 不撤销add,撤销commit,保留修改

保留工作目录和暂存区的修改,将 HEAD 指向指定的提交,相当于取消提交并将更改放回暂存区。(撤销了commit,但是没有撤销add,此时你可以直接commit提交)

根据哈希值还原到第二次的提交文件,这里的commit是哈希值,因为我们这从第3次提交回退到第2次提交,是回退到上一个版本,所以可以HEAD^1代表哈希值

html 复制代码
git reset --soft <commit>

git reset --soft 100c6c8ce803b4067f65f7fb13a2723ee30db16c
git reset --soft HEAD^1

可以看到此时的txt内容不变仍然是我们提交之前的,但是git log会发现第三次提交没了.

也就是说,你回到了你第三次提交之前,回退了add和commit的命令

  • 将当前分支的 HEAD 指针移动到指定的提交(commit)100c6c8ce803b4067f65f7fb13a2723ee30db16c,这意味着当前分支会回退到这个提交之前的状态。
  • 保留之后的更改在暂存区中,这意味着之后的更改不会被取消暂存。
  • 保留工作目录中的修改,这意味着工作目录中的文件不会被改变。

git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改

默认行为,保留工作目录的修改,但不会保留暂存区的修改,将 HEAD 指向指定的提交,相当于取消提交并将更改放回工作目录。(撤销了add和commit,下次提交你需要add后才能commit)

html 复制代码
git reset --mixed <commit> 
或
git reset <commit>

git reset --mixed HEAD^1

git reset --hard 撤销add,撤销commit,不保存修改

重设 HEAD 到指定提交,并丢弃工作目录和暂存区中的所有修改,慎用,会永久丢失未提交的修改。

(回退add回退commit并且回到上次刚刚提交后的状态,放弃了所有修改,慎用)

html 复制代码
git reset --hard <commit>

git reset --merge 取消合并

html 复制代码
git reset --merge <commit>

用于取消一个合并,并将 HEAD 指向合并前的状态。

git reset --merge 的作用包括:

  • 将当前分支指向合并之前的状态,撤销合并操作。
  • 保留工作目录和暂存区的文件状态,让你可以重新处理合并,解决冲突或者进行其他操作。

git reset --keep 不撤销add,撤销commit,根据情况判断区别与mixed

类似于 --hard,但会保留未提交的本地修改。

当使用 git reset --keep 命令时,版本库会回退到指定的提交,同时清空暂存区,并且会根据情况保留或重置工作目录中的文件状态。

第一种情况

如果工作区中的文件在当前版本和回退版本之间没有发生过变动,那么工作区的修改将被保留,不会受影响。

html 复制代码
git reset --keep  <commit>
git reset --keep  HEAD^1

可以发现此时的版本回退了,但是文件内容改为了原来的,git log后发现第三次提交没有了,并且可以直接commit无需add

第二种情况发生了合并冲突

如果工作区中的文件在当前版本和回退版本之间有发生过变动,并且工作区也进行了修改,那么需要手动合并这些变动或解决可能出现的冲突。

在我们执行keep之前先修改了txt的内容,就会有如下报错,提示合并冲突


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-2-1

欢迎关注 『发现你走远了』 博客,持续更新中
欢迎关注 『发现你走远了』 博客,持续更新中


相关推荐
int WINGsssss19 小时前
Git使用
git
用户07605303543821 小时前
Git Revert:安全移除错误提交的方式
git
Good_Starry1 天前
Git介绍--github/gitee/gitlab使用
git·gitee·gitlab·github
云端奇趣2 天前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
F_D_Z2 天前
【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
网络·git·网络协议·ssl
等风来不如迎风去2 天前
【git】main|REBASE 2/6
git
艾伦~耶格尔2 天前
IDEA 配置 Git 详解
java·ide·git·后端·intellij-idea
云兮杜康2 天前
IDEA中用过git之后文件名颜色全变红
java·git·intellij-idea
睡不醒的小泽2 天前
git merge 和 git rebase
git
艾伦~耶格尔2 天前
Git 下载及安装超详教程(2024)
git·gitee·码仓