Git中一些撤销和恢复命令的使用小结
发布时间:2022-07-30 08:13:03
这篇文章主要介绍了Git中一些撤销和恢复命令的使用小结,文中示例基于Mac OS系统环境(当然这关系不大XD),需要的朋友可以参考下
撤销一个“已公开”的改变
场景: 你已经执行了 git push, 把你的修改发送到了 GitHub,现在你意识到这些 commit 的其中一个是有问题的,你需要撤销那一个 commit.
方法:
复制代码代码如下:
git revert
原理: git revert 会产生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或者说是反转的)。如果原先的 commit 是“物质”,新的 commit 就是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加回去,任何在原先的 commit 里加入的内容会在新的 commit 里被删除。
这是 Git 最安全、最基本的撤销场景,因为它并不会改变历史 — 所以你现在可以 git push 新的“反转” commit 来抵消你错误提交的 commit。
撤销“本地的”修改
场景: 一只猫从键盘上走过,无意中保存了修改,然后破坏了编辑器。不过,你还没有 commit 这些修改。你想要恢复被修改文件里的所有内容 — 就像上次 commit 的时候一模一样。
方法:
复制代码代码如下:
git checkout --
原理: git checkout 会把工作目录里的文件修改到 Git 之前记录的某个状态。你可以提供一个你想返回的分支名或特定 SHA ,或者在缺省情况下,Git 会认为你希望 checkout 的是 HEAD,当前 checkout 分支的最后一次 commit。
记住:你用这种方法“撤销”的任何修改真的会完全消失。因为它们从来没有被提交过,所以之后 Git 也无法帮助我们恢复它们。你要确保自己了解你在这个操作里扔掉的东西是什么!(也许可以先利用 git diff 确认一下)
Git仓库撤销至前一次提交时的状态
复制代码代码如下:
$ git checkout
复制代码代码如下:
$ git checkout -b
撤销最近一次代码提交
有时候你可能会不小心提交了错误的文件或一开始就遗漏了某些东西。下面这三步操作可以帮助你解决这个问题。
复制代码代码如下:
$ git reset --soft HEAD~1
# 对工作文件进行必要的更改
$ git add -A .
$ git commit -c ORIG_HEAD
你执行第一个命令时,Git会将HEAD指针后移到此前的一次提交,之后你才能移动文件或作必要的修改。
然后你就可以添加所有的修改,而且当你执行最后的命令时,Git会打开你的默认文本编辑器,其中会包含上一次提交时的信息。如果愿意的话,你可以修改提交信息,或者你也可以在最后的命令中使用-C而不是-c,来跳过这一步。
撤销合并Merge
要想撤销合并,你可能必须要使用恢复命令HARD RESET回到上一次提交的状态。“合并”所做的工作基本上就是重置索引,更新working tree(工作树)中的不同文件,即当前提交()代码中与HEAD游标所指向代码之间的不同文件;但是合并会保留索引与working tree之间的差异部分(例如那些没有被追踪的修改)。
复制代码代码如下:
$ git checkout -b
在撤销“本地修改”之后再恢复
场景: 你提交了几个 commit,然后用 git reset --hard 撤销了这些修改(见上一段),接着你又意识到:你希望还原这些修改!
方法:
复制代码代码如下:
git reflog 和
复制代码代码如下:
git reset或
复制代码代码如下:
git checkout
原理: git reflog 对于恢复项目历史是一个超棒的资源。你可以恢复几乎 任何东西 — 任何你 commit 过的东西 — 只要通过 reflog。
你可能已经熟悉了 git log 命令,它会显示 commit 的列表。 git reflog 也是类似的,不过它显示的是一个 HEAD 发生改变的时间列表.
一些注意事项:
它涉及的只是 HEAD 的改变。在你切换分支、用 git commit 进行提交、以及用 git reset 撤销 commit 时,HEAD 会改变,但当你用 git checkout --
大量的撤销/恢复
场景: 你向某个方向开始实现一个特性,但是半路你意识到另一个方案更好。你已经进行了十几次提交,但你现在只需要其中的一部分。你希望其他不需要的提交统统消失。
方法:
复制代码代码如下:
git rebase -i
原理: -i 参数让 rebase 进入“交互模式”。它开始类似于前面讨论的 rebase,但在重新进行任何提交之前,它会暂停下来并允许你详细地修改每个提交。
rebase -i 会打开你的缺省文本编辑器,里面列出候选的提交。如下所示:
前面两列是键:第一个是选定的命令,对应第二列里的 SHA 确定的 commit。缺省情况下, rebase -i 假定每个 commit 都要通过 pick 命令被运用。
要丢弃一个 commit,只要在编辑器里删除那一行就行了。如果你不再需要项目里的那几个错误的提交,你可以删除上例中的1、3、4行。
如果你需要保留 commit 的内容,而是对 commit 消息进行编辑,你可以使用 reword 命令。 把第一列里的 pick 替换为 reword (或者直接用 r)。有人会觉得在这里直接重写 commit 消息就行了,但是这样不管用 —rebase -i 会忽略 SHA 列前面的任何东西。它后面的文本只是用来帮助我们记住 0835fe2 是干啥的。当你完成 rebase -i 的操作之后,你会被提示输入需要编写的任何 commit 消息。
如果你需要把两个 commit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:
squash 和 fixup 会“向上”合并 — 带有这两个命令的 commit 会被合并到它的前一个 commit 里。在这个例子里, 0835fe2 和 6943e85 会被合并成一个 commit, 38f5e4e 和 af67f82 会被合并成另一个。
如果你选择了 squash, Git 会提示我们给新合并的 commit 一个新的 commit 消息; fixup 则会把合并清单里第一个 commit 的消息直接给新合并的 commit 。 这里,你知道 af67f82 是一个“完了完了….” 的 commit,所以你会留着 38f5e4e as的 commit 消息,但你会给合并了 0835fe2 和 6943e85 的新 commit 编写一个新的消息。
在你保存并退出编辑器的时候,Git 会按从顶部到底部的顺序运用你的 commit。你可以通过在保存前修改 commit 顺序来改变运用的顺序。如果你愿意,你也可以通过如下安排把 af67f82 和 0835fe2 合并到一起:
猜你喜欢
- Excel中mod是一个求余函数,其格式为: mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数。特别注意:在EXCEL
- Office 2016专业增强不能自定义安装路径,不能选择需要安装的产品组件(不能取消outlook, onenote等垃圾组件)。软件的下
- 根据郭明錤预测,新一代苹果 MacBook AIr 机型或许将在今年的 WWDC 上正式发布,也就是在 2022 年的第二或者第三季度上市。
- 我们在使用Win10专业版系统的电脑时,可能会遇到系统设置打不开,一直卡在那里,等了很久还是在等待界面中。遇到Win10专业版打不开系统设置
- Excel作为我们日常办公中不可缺少的办公软件之一,熟练地使用Excel能够大大提高我们的工作效率。今天主要是给大家分享一个关于如何使用Ex
- 开始设计实际支付,分类间距设置为100%, 4、数据源选择我们的数据表 ,并设置一下颜色,选中实际支付右击,设置形状填充为无填充,首先我们将
- 我们在使用Win10系统时,荒野大镖客2Epic游戏平台出现鼠标指针不正常的情况,遇到这样的问题该怎么办呢,接下来小编就给大家带来荒野大镖客
- 做为一个新新青年,Excel如果你不会用,你就OUT啦,如果你会用,但是就是做不出好看的课程表,那怎么行呢。下面小编就教大家Excel怎么做
- 如何设置Mac电脑每次登陆时自动变化背景?每次登录使用Mac电脑时都会有不同的背景,感觉一天的工作都充满了能量,那是如何做到登录背景每次的自
- 在工作中我们有时需要将word文档转变为PDF文档,不同于Office2007及以后版本可具有的直接另存为PDF的功能,office2003
- 很多游戏玩家在玩游戏的时候经常会收到系统提示:d3dx9_xxx.dll找不到、丢失、缺少,导致游戏无法运行,游戏体验感下降。在玩一些比较老
- 当我们需要在wps里插入脚注时 ,需要怎样操作呢?下面就让小编告诉你wps插入脚注的方法。wps插入脚注的方法:打开文档,光标定位到需要添加
- win10系统出来后,很多朋友都想安装它,但他们不知道该检查什么,该放弃什么。今天,小编将为您带来真正的win10安装教程的详细步骤。我希望
- 今天和大家分享一个Excel图表制作技巧。先看效果图:来看基础数据:这里用到的技法,主要是万能的散点图。先来观察一下图表的特点:该图表不论高
- excel中如果一个单元格中的信息是以=开头说明什么?excel中如果一个单元格中的信息是以“=”开头则说明该单元格中的信息是公式。EXCE
- Excel中的表格内具体该如何操作进行求乘积呢?下面是由小编分享的excel表格内进行求乘积的教程,以供大家阅读和学习。excel表格内进行
- 1、首先我们启动Word2013,在页面输入“建议栏”三个汉字,然后鼠标左键双击上方的标尺,下图红色标记处。 2、
- 一个word文档怎么拆分成多个文档?下载一篇word文档,发现想要的内容都在里面,现在想根据原有内容分成两word文档,该怎么拆分呢?最简单
- 好多人留言问关于word 2007中的书签的用法,一直没有时间一一回答,今天就一起回答了吧,希望不知道的人可以看到这篇文章。其实主要还是用于
- 当我们制作表格的时候,通常先画一个表格,再输入内容,那么今天,我们就来教大家如何在WPS文字当中实现1秒将文本转为表格的方法,具体怎么操作呢