如果我中断 git add 命令会发生什么?

2023-12-13

我运行了以下命令:

git add .由于文件很多(> 10TB),所以添加需要时间。中途我不小心删除了一些文件(我需要恢复)。所以,如果我在终端中执行“Ctrl + C”(中断 Git)。

会发生什么?

  1. git 中将会有部分添加(我可以使用 git checkout 恢复一些文件?)
  2. git 中不会添加任何文件。

Thanks,


在我的实验中,一个被中断的git add索引中没有留下任何内容(您可以通过使用来确认这一点git status),但它确实将其创建的任何 blob 保留在其内部结构中,因此可能有一些文件可以恢复。 看一下https://git-scm.com/book/en/v2/Git-Internals-Git-Objects有关从 Git 内部 blob 中提取文件的信息。

我用这种方式恢复了一个文件:

> find .git/objects -type f
...
.git/objects/ac/a6e96aaf9492a2ee8f9ef51f0197ad56436fd4
...

> git cat-file -p aca6e96aaf9492a2ee8f9ef51f0197ad56436fd4 > file1

请注意,块 ID 是目录名称ac加上 blob 文件名a6e96...使aca6e96....

这样 Git 就给了我一个文件的内容。不过,这使用起来并不有趣,因为您获得的是没有文件名的文件内容。不幸的是,如果您有机会进行提交,文件名将存储在索引中以及更持久的结构中,但对于在中断期间创建的 blob,该信息尚不可用。git add.

这是一个脚本,它将在一个带有分隔符的文件中列出所有 blob,这可能会让您的生活更轻松一些:

File list-blobs.pl:

#!/usr/bin/perl

open BLOBS, "find .git/objects -type f |";
while (<BLOBS>) {
   chop;
   s#.*(..)/#\1#;
   print "BLOB $_\n";
   system("git cat-file -p $_");
}

Run

chmod +x list-blobs.pl    
list-blobs.pl | less

你会看到在中断之前 Git 实际上在 blob 中存储了哪些对象git add.

更简单:使用https://github.com/ethomson/git-recover作者爱德华·汤姆森在下面的评论中分享了这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我中断 git add 命令会发生什么? 的相关文章

  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch
  • 当 .gitattributes 中的 EOL 设置为 CRLF 时,Git diff 认为行结尾为 LF

    当我恢复对带有 Windows 行结尾的文件的更改并且 gitattributes 将 EOL 定义为 CRLF 时 git 认为行结尾已更改为 LR 即使十六进制编辑器显示 CRLF 仅当 gitattributes 定义 EOL 字符时
  • Git - 如何将整个目录恢复到特定提交(删除任何添加的文件)

    我想恢复 git 中的目录 恢复其中的所有文件 并删除自该提交以来添加的所有文件 进行结账似乎只能满足我的第一个要求 但不会删除任何文件 我想出了最简单的解决方案 git rm path to dir git checkout
  • git reflog 和 log 有什么区别?

    手册页说 log 显示提交日志 reflog 管理 reflog 信息 reflog 信息到底是什么 它有哪些日志没有的信息 日志看起来更详细 git log显示当前的 HEAD 及其祖先 也就是说 它打印提交 HEAD 指向的提交 然后打
  • 为什么 Git 无法将文件更改与修改后的父级/主控合并?

    我有一个文件 里面只有一行 我创建一个分支并向同一文件添加第二行 保存并提交到分支 我切换回主人 并向文件中添加不同的第二行 保存并提交给master 现在总共有 3 条独特的线路 如果我现在尝试将分支合并回主分支 则会遇到合并冲突 为什么
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • 有没有一个简单的命令可以将分支转换为标签?

    我即将完成将 哑快照 转换为 git 的繁琐过程 这个过程进展得非常顺利 感谢这个重命名过程 https stackoverflow com questions 6628539 how to tell git that its the sa
  • Git 工作流程:分叉项目并维护本地修改副本,但保持最新

    我正在尝试找出最佳工作流程 用于维护具有自定义功能的 github 托管项目 moodle 的本地副本 同时保持保持副本最新的能力 告诉我我正在考虑做的事情是否完全疯狂 分叉项目 github com moodle moodle gt gi
  • 具有单个子模块的多个存储库

    我已经找了一段时间但没有找到答案 也许我不知道该看什么 我们有一个主库 它本身就是一个存储库 我们称之为 Lib 它包含我们的大部分模块和子模块 我们还假设它的大小为 2GB 现在我们有很多项目 例如 ProjA ProjB ProjC 每
  • 如何创建名称中带有正斜杠的标签

    当我已经有了类似的标签时 有什么方法可以创建名称中带有正斜杠的 git 标签吗 假设我有 1 16 0 标签 并且我想创建 1 16 0 1 0 0 标签 git tag 1 16 0 1 0 0 error refs tags 1 16
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • 删除并在另一个文件夹中重新创建后保留文件的 Git 历史记录

    我有以下场景 删除了提交 1 中名为 src GetData cs 的文件 在提交 5 中创建了一个名为 src Get GetDataNew cs 的文件 在提交 7 中将 2 中的文件重命名为 src Get GetData cs 1
  • git-lfs 中的多个文件版本

    我正在尝试估计 GitHub 上我的项目的存储要求 并对 git lfs 如何存储多个版本的文件有一些疑问 git lfs 是否存储多个版本的文件 如果是这样 对文件的每次更改都会导致复制整个文件 还是仅存储差异 所有版本都会计入 gith
  • 为什么“git pull”在我的网络服务器上失败?

    我使用 git 来提取站点代码库的更改 文件内部的更改和文件删除是有效的 但是 当我将新文件或目录 不是空的 添加到存储库时 它不会被本地拉到网络服务器 拉动时不会显示错误消息 但在检查该文件时 它不在那里 在线的 bitbucket re
  • 以非交互式方式查找合并提交的正确父级

    我正在准备 svn2git 迁移 同时https github com nirvdrum svn2git https github com nirvdrum svn2git虽然非常有用 但我仍然遇到了一些恶作剧 我已经清理掉了大部分 但还剩
  • git push --force-with-lease 总是安全吗?

    我一直遵循的规则是 一旦 git 历史记录被推送到远程存储库 就不再修改它 但我想知道交互式变基到推送 force with lease 是否绕过了这条规则 如果强制租约成功 对其他用户来说是否完全安全 或者此策略有任何注意事项吗 预先感谢
  • npm install 的问题(Angular)

    今天我尝试创建一个新项目 所以我使用这个命令 ng new NAME style less 并在我的cmder中弹出错误和警告 所以我卸载了 Roaming npm 和 npm cache 中的节点和文件 然后我安装了node并再次下载cm
  • 在 Windows 下克隆 git repo 时,出现“错误:无法创建文件 <文件>...(是目录)”

    Z gt git clone git github com kennethreitz httpbin git Cloning into httpbin remote Counting objects 1073 done remote Com

随机推荐

  • 如何在iPhone应用程序中通过代码获取用户的当前位置?

    我想从我的 iPhone 应用程序获取用户的当前位置 我想在我的应用程序中显示用户当前的位置 例如国家 地区名称 纬度 经度信息 我也想在谷歌地图上显示位置 我也尝试过谷歌搜索 但无法得到确切的答案 我已经得到了要使用的信息CLLocati
  • 将 B 样条曲线拟合到控制路径

    我意识到在 R 中使用 B 样条存在很多问题和答案 但我还没有找到这个 看似简单 问题的答案 给定一组描述控制路径的点 如何拟合 B 样条曲线并沿着曲线提取给定数量的点 例如 100 以进行绘图 问题是路径在 x 和 y 上都不是单调的 控
  • 如何在 Java 中替换字符串中的点 (.)

    我有一个名为persons name 我想更换DOT with 即我的输出将是persons name 我尝试了这段代码 String a str xpath replaceAll a 我收到 StringIndexOutOfBoundsE
  • 如何向网站添加一些非标准字体?

    有没有办法在网站上添加一些自定义字体而不使用图像 Flash或者其他一些图形 例如 我正在开发一个婚礼网站 我发现了很多适合该主题的漂亮字体 但我找不到在服务器上添加该字体的正确方法 我如何将该字体与 CSS 一起包含到 HTML 中 没有
  • R:检查一组变量是否形成唯一索引

    我有一个大数据框 我想检查一组 因子 变量的值是否唯一标识数据的每一行 我当前的策略是按我认为是索引变量的变量进行聚合 dfAgg aggregate dfTemp var1 by list dfTemp var1 dfTemp var2
  • 在循环内调用控制器(crawler4j-3.5)

    嗨 我正在打电话controller inside for loop 因为我有超过 100 个 url 所以我将所有内容都放在列表中 我将迭代并crawl在页面上 我也为 setCustomData 设置了该 url 因为它不应该离开域 f
  • 查看不同dtype下的对象数组

    我想查看一个具有封装整行的 dtype 的对象数组 data np array a 1 a z b a dtype object dt np dtype x object y object data view dt 我收到错误 TypeEr
  • Xamarin 错误:未安装框架:.NETPortable,版本=v4.5

    我成功安装了 Xamarin 并创建了一个新项目 根本没有代码 我在引用下收到以下错误 并收到 Xamarin Forms 丢失的错误 我尝试搜索 但在修复建议有效的地方没有看到同样的错误 谢谢 Error Framework not in
  • 在 WinForm 项目选项卡中运行 exe

    我有兴趣使用我正在编写的 winform 应用程序执行以下操作 以在 Visual Studios 2010 IDE 中的 c 选项卡中打开 exe 我目前可以使用以下代码通过在所需选项卡中单击按钮来打开程序 string str INSE
  • SQL Server 动态查询

    我有 15 个存储过程 它们从公用表返回数据 然后将该表与特定表连接起来以检索库存 Example Common tblCommon Specific tblSpecific 有没有办法可以将名称 tblSpecific 作为变量传递到单个
  • 您尚未接受许可协议。[Android SDK Platform 23]

    我正在使用 React Native 当我运行react native run android运行命令我收到此错误 您尚未接受以下SDK的许可协议 组件 Android SDK 平台 23 Android SDK 构建工具 23 0 1 我
  • C++ 中的 strtok() 类似物

    我只是找不到一种算法来通过大量分隔符将字符串拆分为单词 我知道如何用空格分割字符串istringtream and by 单个分隔符 with getline 我怎样才能将它们全部连接起来 例如 input This is a string
  • 我试图在 svg 元素中创建一个 rect 元素,但它不起作用

    为什么我运行该函数时没有出现红色矩形createRect 任何帮助将非常感激 function createRect var rec document createElement rect rec style width 100px rec
  • 从 Cucumber Stepdefs 中的 Testng.xml 文件读取参数值

    我能够在与 Cucumber 集成时运行 testng 脚本 我已按照中定义的确切步骤进行操作http automatictester co uk 2015 06 11 basic cucumberjvm selenium webdrive
  • 使用combineLatest时如何捕获链式rxjs可观察量的错误?

    继从这个帖子 我有以下 Observable combineLatest this translate get key1 this translate get this translate get key3 this translate g
  • 尝试用C++实现运行长度平滑算法

    这是我的老问题C 中的 RLSA 但我还没有得到任何帮助 我尝试将Matlab代码实现为C 该算法的描述 http crblpocr blogspot fr 2007 06 run length smoothing algorithm rl
  • Log4Net MemoryAppender 似乎错过了高速日志事件

    我正在使用 log4net MemoryAppender 在表单文本框中显示我的 log4net 输出 我的配置文件的相关部分是
  • JComboBox 的值

    是否可以定义与 JComboBox 中的实际内容不同的值 在 HTML 中 它看起来如下
  • 在 Pandas 中使用 group by 进行转换

    我正在创建一个数据框 import pandas as pd df1 pd DataFrame Name Alice Bob Mallory Mallory Bob Mallory City Seattle Seattle Portland
  • 如果我中断 git add 命令会发生什么?

    我运行了以下命令 git add 由于文件很多 gt 10TB 所以添加需要时间 中途我不小心删除了一些文件 我需要恢复 所以 如果我在终端中执行 Ctrl C 中断 Git 会发生什么 git 中将会有部分添加 我可以使用 git che