教你找回 git stash 数据中的数据

导读由于不正确的 git 命令,他把保存在 stash 中的更改删除了。在这悲伤的情节之后,我们试图寻找一种恢复他所做工作的方法,而且我们做到了!首先警告一下:当你在实现一个大功能时,请将它分成小块并定期提交。长时间工作而不做提交并不是一个好习惯。下面就演示一下怎样从 stash 中恢复误删的更改。创建测试分支

我用作示例的仓库中,只有一个源文件 “main.c”,如下所示:

教你找回 git stash 数据中的数据
它只有一次提交,即 “Initial commit”:
教你找回 git stash 数据中的数据

该文件的第一个版本是:

教你找回 git stash 数据中的数据

我将在文件中写一些代码。对于这个例子,我并不需要做什么大的改动,只需要有什么东西放进 stash 中即可,所以我们仅仅增加一行。“git diff” 的输出如下:
教你找回 git stash 数据中的数据

误操作git stash

现在,假设我想从远程仓库中拉取一些新的更改,当时还不打算提交我自己的更改。于是,我决定先 stash 它,等拉取远程仓库中的更改后,再把我的更改恢复应用到主分支上。我执行下面的命令将我的更改移动到 stash 中:

git stash

登录后复制

使用命令”git stash list” 查看 stash,在这里能看到我的更改:

教你找回 git stash 数据中的数据

我的代码已经在一个安全的地方,而且主分支目前是干净的(使用命令 git status检查)。现在我只需要拉取远程仓库的更改,然后把我的更改恢复应用到主分支上,而且我也应该是这么做的。

但是我错误地执行了命令:

git stash drop

登录后复制

它删除了 stash,而不是执行了下面的命令:

stash pop

登录后复制

这条命令会在从栈中删除 stash 之前应用它。如果我再次执行命令 git stash list,就能看到在没有从栈中将更改恢复到主分支的之前,我就删除了它。OMG!接下来怎么办?

找回git stash 数据

好消息是:git 并没有删除包含了我的更改的对象,它只是移除了对它的引用。为了证明这一点,我使用命令 git fsck,它会验证数据库中对象的连接和有效性。这是我对该仓库执行了 git fsck 之后的输出:
教你找回 git stash 数据中的数据

由于使用了参数 –unreachable,我让 git-fsck 显示出所有不可访问的对象。正如你看到的,它显示并没有不可访问的对象。而当我从 stash 中删除了我的更改之后,再次执行相同的指令,得到了一个不一样的输出:
教你找回 git stash 数据中的数据

现在有三个不可访问对象。那么哪一个才是我的更改呢?实际上,我不知道。我需要通过执行命令 git show 来搜索每一个对象。

教你找回 git stash 数据中的数据

就是它!ID 号 95ccbd927ad4cd413ee2a28014c81454f4ede82c 对应了我的更改。现在我已经找到了丢失的更改,我可以恢复它。其中一种方法是将此 ID 取出来放进一个新的分支,或者直接提交它。如果你得到了你的更改对象的 ID 号,就可以决定以最好的方式,将更改再次恢复应用到主分支上。对于这个例子,我使用 git stash 将更改恢复到我的主分支上。

git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c

登录后复制

另外需要重点记住的是 git 会周期性地执行它的垃圾回收程序(gc),它执行之后,使用 git fsck 就不能再看到不可访问对象了。

以上就是教你找回 git stash 数据中的数据的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2208082.html

(0)
上一篇 2025年2月26日 02:52:08
下一篇 2025年2月24日 11:30:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python 测试框架:自动化测试的革命

    随着软件开发的复杂度不断增加,自动化测试已成为确保应用程序质量和可靠性的关键步骤。python 因其灵活性、可扩展性和广泛的库而成为自动化测试的首选语言之一。本文将深入探讨 Python 测试框架,了解它们如何彻底改变了自动化测试的格局。 …

    2025年2月26日
    200
  • python编程软件哪个好用

    最佳 Python 编程软件包括:1. PyCharm(功能齐全的 IDE)、2. Thonny(初学者友好)、3. Visual Studio Code(流行且可扩展)、4. Jupyter Notebook(数据科学和机器学习)、5. …

    2025年2月26日
    200
  • python下载完怎么打开

    答案: 使用命令提示符或终端运行 Python 文件。详细描述:打开命令提示符或终端。导航到 Python 文件目录(使用 cd 命令)。使用 python filename.py 运行文件(其中 filename.py 是文件名称)。查看…

    2025年2月26日
    200
  • 怎么给python下载库

    有两种下载 Python 库的方法:使用 pip 包管理工具:pip install 从源代码安装:下载源代码、解压缩、编译并安装(python setup.py install) 如何给 Python 下载库 下载库的方法 有两种主要方法…

    2025年2月26日
    200
  • python爱心代码写好后怎么运行

    运行 Python 爱心代码的步骤:确保已安装 Python 解释器。创建并保存包含代码的 Python 文件。打开命令提示符或终端窗口。导航到文件目录。运行 Python 解释器。引入代码文件。调用绘制爱心函数。按回车键运行代码。 Pyt…

    2025年2月26日
    200
  • Python下载后应如何打开

    要打开刚下载的 python,请按以下步骤操作:将安装程序放在易于访问的位置。双击安装程序图标并按照屏幕上的说明进行操作。安装完成后,在命令提示符或终端窗口中输入 “python” 以启动 python 交互式 sh…

    2025年2月26日
    200
  • linux系统怎么设置终端透明?

    linux在终端中执行命令时,为了难能看到其它的帮助文档,比如pdf、网页等,可以设置终端透明度,该怎么设置呢?下面我们就来看看详细的教程。。 一、开启窗口特效 1、要给终端设置透明度,需要先开启窗口特效,首先点击任务栏上的”控制中心“。 …

    2025年2月26日 互联网
    200
  • 制作包含私有 snap 的工厂镜像!

    导读这篇帖子是有关 在 Ubuntu Core 开发 ROS 原型到成品 系列的补充,用来回答我收到的一个问题: “我想做一个工厂镜像,但我不想使我的 snap 公开” 当然,这个问题和回答都不只是针对于机器人技术。在这篇帖子中,我将会通过…

    2025年2月26日
    200
  • pycharm项目打包exe怎么变成APK

    PyCharm 无法直接将 Python 项目打包为 APK。PyCharm 专注于 Python 开发,而 APK 用于在安卓设备上运行应用程序。打包 Python 项目为 APK 需要额外的工具和步骤。 PyCharm 项目打包为 AP…

    2025年2月26日
    200
  • 怎么在pycharm安装模块

    要在 PyCharm 中安装模块,请遵循以下步骤:打开 PyCharm 并转到“设置”>“项目”>“Python 解释器”。选中“弹出窗口”选项卡并单击“安装包”按钮。搜索模块,选中它并单击“安装”按钮。PyCharm 将下载并…

    2025年2月26日
    200

发表回复

登录后才能评论