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

问题描述 投票:0回答:1

当某些提交发生冲突时,我正在执行变基操作。在解决冲突期间,我不小心添加了所有未跟踪的文件。因为我也不跟踪未跟踪的文件,所以我不记得要取消暂存哪些文件。或者哪些文件作为冲突提交的一部分暂存。

我没有弄清楚它,而是决定

git rebase --abort
希望重新开始。然而,那些错误添加的文件现在已经消失了。

我想了解发生了什么事。以及为什么

git rebase --abort
不将我的工作树恢复到原始状态。如果可能的话,在哪里可以找到这些文件。他们中的一些人有有价值的工作。

git rebase abort
1个回答
-1
投票

什么都没有丢失!

Git reflog 记录在本地分支上进行的所有提交(简称“引用”或“refs”)以及

HEAD
指向的所有提交。

运行

git reflog
,您应该会看到在中止的变基过程中所做的所有提交。 reflog 应包含条目“rebase(中止):返回...”。

使用

git log
gitk
检查此提交(或引用日志的任何其他提交),然后使用
git branch hash-of-that-commit
创建指向该提交的新分支。然后您可以切换到该分支来提取文件。

至于为什么中止变基时文件被删除:Git 在操作过程中只保留未跟踪的文件。一旦您跟踪这些文件(有意或无意),它们就会由 Git 管理。切换分支或签出不同的提交将从工作树中删除(跟踪)文件,这些文件是“先前”提交的一部分,但不是要签出的提交的一部分。

好处是 Git 不会轻易丢失已经提交过一次的数据。


如果文件从未被提交,但文件的内容已暂存(使用

git add
),那么仍然可以恢复内容,但需要更多工作。运行
git fsck
查找任何悬空的 blobs,然后使用
git cat-file -p
git show
以及相应 blob 的对象 ID。找到正确的 blob 后,将
cat-file
/
show
的输出重定向到具有所需名称的文件。对所有文件重复此操作。

© www.soinside.com 2019 - 2024. All rights reserved.