为什么在中止git rebase后新添加的文件会被删除?

vql8enpb  于 2023-08-01  发布在  Git
关注(0)|答案(1)|浏览(188)

我正在做一个变基,当一些提交有冲突。在解决冲突的过程中,我不小心添加了 * 所有 * 未跟踪的文件。因为我也不跟踪未跟踪的文件,所以我不记得哪些文件要取消舞台。或者哪些文件作为冲突提交的一部分被暂存。
而不是弄清楚它,我决定git rebase --abort希望只是重新开始。但是,那些错误添加的文件现在已经消失。
我想知道发生了什么事。以及为什么git rebase --abort不能将我的工作树恢复到原始状态。如果可能的话,在哪里可以找到这些文件。他们中的一些人有很有价值的工作。

kb5ga3dv

kb5ga3dv1#

什么都没丢!
Git reflog记录了本地分支上的所有提交(简称为“references”或“refs”),以及HEAD指向的所有提交。
运行git reflog,你应该会看到在你中止的rebase过程中所做的所有提交。reflog应该包含一个条目“rebase(abort):回到……”。
使用git loggitk检查这个提交(或refog的任何其他提交),然后使用git branch hash-of-that-commit创建一个指向该提交的新分支。然后,您可以切换到该分支以提取文件。
至于为什么在中止rebase时删除文件:Git只会在运行过程中留下未跟踪的文件。一旦你跟踪了这些文件(有意或无意),它们就由Git管理了。切换分支或 checkout 不同的提交将从你的工作树中删除(跟踪)文件,这些文件是“上一次”提交的一部分,但不是要 checkout 的提交的一部分。
好的一面是Git不会轻易丢失已经提交过一次的数据。
如果文件从未提交,但文件的内容被暂存(使用git add),那么仍然可以恢复内容,但这是一个有点多的工作。运行git fsck查找任何悬空的 * blob *,然后使用git cat-file -pgit show以及相应blob的对象ID。找到正确的blob后,将cat-file/show的输出重定向到具有所需名称的文件。对所有文件重复此操作。

相关问题