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

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


相关推荐
high20113 小时前
【Git】-- 版本说明
git
kaixin_learn_qt_ing4 小时前
git clone
git
sin22014 小时前
git stash
git
喝鸡汤4 小时前
一起学Git【第二节:创建版本库】
git
慢慢成长的码农4 小时前
git 同步分支操作
git
sin22014 小时前
git推送本地仓库到远程(Gitee)
git·gitee
丁总学Java6 小时前
git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表
git
yylの博客9 小时前
Windows通过git-bash安装zsh
windows·git·bash·zsh
丁总学Java9 小时前
(Z Shell)zsh: no matches found: ? 使用单引号包裹
git·zsh
萌狼蓝天10 小时前
【NAS】绿联NAS+极狐Gitlab+1Panel
git