当某些提交发生冲突时,我正在执行变基操作。在解决冲突期间,我不小心添加了所有未跟踪的文件。因为我也不跟踪未跟踪的文件,所以我不记得要取消暂存哪些文件。或者哪些文件作为冲突提交的一部分暂存。
我没有弄清楚它,而是决定
git rebase --abort
希望重新开始。然而,那些错误添加的文件现在已经消失了。
我想了解发生了什么事。以及为什么
git rebase --abort
不将我的工作树恢复到原始状态。如果可能的话,在哪里可以找到这些文件。他们中的一些人有有价值的工作。
什么都没有丢失!
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
的输出重定向到具有所需名称的文件。对所有文件重复此操作。