gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:34:39 27 4
gpt4 key购买 nike

我运行了以下命令:

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

会发生什么?

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

谢谢,

最佳答案

在我的实验中,一个中断的 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

注意bloc ID是目录名ac加上 blob 文件名 a6e96...制作aca6e96... .

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

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

文件 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 $_");
}

运行

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

在您中断之前,您将看到 Git 实际存储在 blob 中的对象 git add .

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

关于git - 如果我中断 git add 命令会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54237026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com