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

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


相关推荐
高山莫衣4 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
码农藏经阁4 小时前
工作中常用的Git操作命令(一)
git
kobe_OKOK_4 小时前
【团队开发】git 操作流程
git·elasticsearch·团队开发
码农垦荒笔记4 小时前
Git 安装闭坑指南(仅 Windows 环境)
windows·git
CC码码14 小时前
管理你的多个 Git 密钥(多平台多账号)
git·gitlab·github
CC码码14 小时前
管理你的多个 Git 密钥(单平台多账号)
git·gitlab·github
大卫小东(Sheldon)14 小时前
GIM 1.5发布了! 支持Windows系统了
git·ai·rust
flying jiang14 小时前
将大仓库拆分为多个小仓库
git
李boyang10 天前
Git(四):远程操作
git
荻野泽溪10 天前
Git新建分支并同步到远程
git