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就肯定免不了使用Excel函数和公式,而求和无疑是使用最多的函数与公式之一,怎么在Excel中进行数值求和呢?本文列出了两种E
- 一位用户在更新Windows10系统之后,发现系统C盘多了一个cmak文件夹,那么这cmak到底是什么文件呢?有什么作用呢?可以删除吗?相信
- 许多使用联想笔记本电脑的玩家发现电脑的网络速度非常慢,这使得办公室或玩游戏的小伙伴非常崩溃。事实上,可能是电脑中的病毒或系统默认设置限制了网
- 如何导出神剪辑里的视频?神剪辑,顾名思义就是一款用于剪辑视频的软件。我们将要剪辑的视频通过该软件进行剪辑好后,想要将剪辑好的视频导出来,具体
- 我们要借助于WPS文字的截屏功能来抓取桌面内容。WPS文字的截屏功能位于“插入”菜单的“截屏”折叠按钮中,对应于“屏幕截取”和“截屏时隐藏当
- 有时候在使用win7系统的自动搜索功能搜索文件的时候,不知道为什么会自动中断搜索,那么遇到这种问题应该怎么办呢?下面就和小编一起来看看有什么
- 苹果siri为什么不能用,苹果siri的开启方法。siri是苹果手机自带的一个语音功能,很多小伙伴新入手了苹果,但是自己用不了Siri,那是
- Windows 10它拥有强大的功能的同时也消耗着很多系统资源。从好的方面来说,Windows10的最新版本还具有一些非常有用的内置功能,运
- Windows11 caj文件怎么打开Windows11 caj文件可以使用CAJviewer文献阅读器打开。但是很多用户不知道caj文件怎
- 从XP时代,网上就有类似的技术文章探讨,我们今天重温一下,看看Win7和Vista下的用户该怎么去动手优化开关机速度。至于Windows操作
- 经常需要制作各种各样的文档,也需要输入很多公式,之前我们在之前的教程当中教过大家利用双行合一的方法输入过上下标,那么今天我们就来教大家如何利
- 千盼万盼,WPS 2013 终究 进去了,Office办公助手也是在第 临时间 停止了下载 装置,体验了一把。界面不错,图标也 从头做了。本
- 办公软件是每个电脑都必备的软件,而最近有的用户表示Win7 32位系统安装Office2010提示MSXML 6.10.1129.0,导致O
- 现在很多电脑都升级到win11了,win11系统有自带的录屏软件,在我们追剧或者打游戏的时候都可以使用录屏软件,但是有很多用户不知道该怎么操
- Windows 10 更新自动发生或通过 Windows 更新设置手动发生。但是,如果您尝试修补新安装或创建自定义脚本来自动执行该过程,则可
- 有时候一个word文档中包含有很多页,为了节约纸张,需要在word中把多页的文本内容缩小后打印在一张纸上,word 2016中在同一纸张上打
- Word文档是一款主要用于编辑和处理文本内容的办公软件,很多小伙伴日常办公时都会需要用到。在Word文档中我们可以通过样式检查器功能快速查看
- 1、word空格有半角与全角之分,可能无意中点了全角,这时候的空格就会变大些(一个全角空格等于两个半角空格)。解决方法:在输入法的显示栏上会
- 数据是商业演示中的重要组成内容,很多幻灯片都在用数据图表的方式来阐述观点和结论。然而,数据图表的设计却令人头痛:一边是庞大的数据资料,一边是