当前位置: 首页 > news >正文

GIT实践与常用命令---回退

实践场景

场景1 回退提交

在日常工作中,我们可能会和多个同事在同一个分支进行开发,有时候我们可能会出现一些错误提交,这些错误提交如果想撤销,可以有两种解决办法:回退( reset )、反做(revert)
keywords:reset、revert、reflog

回退 git reset

reset 操作就是修改 HEAD 指向的位置,将 HEAD 当前指向的位置回退到指定的某个版本,例如针对某个分支我们提交了三次(如图所示),这是 reset 之前的三个 commit 记录,目前 HEAD 指向的是 commit 3的位置,如果我们想把代码回退到 commit 1的位置,怎么操作呢?

git reset --hard  'commit 1 的提交id'


操作完之后 commit 2和 commit 3 的提交记录就没有了,直接回退到了commit 1。注意区分两个参数:hard& soft

  • –hard 直接回退
  • –soft 软回退

soft只回退了commit 的信息,但是内容不会消失,工作区的文件内容都还在。如果还要提交,直接 commit 即可。这种操作的友好性就是如果我们本身只是想把commit的操作给回退,但是不想还原内容,保持所有内容都还在,这种操作就很合适,保证了代码不会丢失。

重做/反做 git revert

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:

反做前:

git revert -n  'commit 2 的提交id'
git commit -m 'test4'

反做后:

找回reset和revert的记录 git reflog

如何找回因回退或反做而消失的commit记录?上述两种操作会造成有些 commit 记录消失,但是如果自己又后悔了,想找回来,我们该怎么操作呢?可以使用reflog查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

git reflog
faa135e HEAD@{0}: commit: test3
783ef0a HEAD@{1}: commit: test2
2288ba8 HEAD@{2}: commit: test1
abddace HEAD@{3}: commit: test3
30df387 HEAD@{4}: commit: test3

参考资料

  • Git 版本回退(实际工作中基本都会遇到) - 掘金
  • yuque.GIT实践与常用命令
http://www.lryc.cn/news/242141.html

相关文章:

  • Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解
  • C现代方法(第23章)笔记——库对数值和字符数据的支持
  • NSGA-II求解微电网多目标优化调度(MATLAB)
  • 7-9 jmu-python-班级人员信息统计
  • Doris分区与分桶(八)
  • mac VScode 添加PHP debug
  • 53.最大子数组和
  • 455.分发饼干
  • 浏览器缓存控制讲解
  • 批量插入SQL 错误 [933] [42000]: ORA-00933: SQL 命令未正确结束
  • 北京数字孪生赋能工业制造,加速推进制造业数字化转型
  • 【NLP】GPT 模型如何工作
  • Linux下安装Foldseek并从蛋白质的PDB结构中获取 3Di Token 和 3Di Embedding
  • 单元测试-java.lang.NullPointerException
  • 机器学习数据集整理:图像、表格
  • Vue: Cannot find module @/xx/xx/xx.vue or its corresponding type declarations.
  • 怎样自动把网页截图发到微信群里
  • Netty实现websocket且实现url传参的两种方式(源码分析)
  • 深入理解C语言指针:基础概念、语法和实际应用
  • 百度云加速免费版下线,推荐几款目前仍旧免费的CDN
  • HarmonyOS(五)—— 认识页面和自定义组件生命周期
  • DevExpress WinForms TreeMap组件,用嵌套矩形可视化复杂分层数据
  • IO口速度影响了什么?
  • Verilog基础:时序调度中的竞争(一)
  • nginx 配置静态缓存全教程 (以及静态缓存文件没有生成)
  • 自己动手打包构建编译cri-dockerd
  • Self-Supervised Exploration via Disagreement论文笔记
  • 【网络奇幻之旅】那年我与区块链技术的邂逅
  • 1.5.1 git/svn日志格式规范
  • [autojs]ui线程中更新控件的值的问题