我之前在几个节点上提交了一个git rebase -i。我添加了一些我想要添加到该提交的新文件。
看起来我在错误的节点上,所以我立即做了一个git rebase --abort。这些新文件现在完全消失了。在reflogs中,它看起来像是发出了删除命令(删除文件模式100644),但文件名都没有出现。
这看起来不太好,但我想我会问 - 这是可以恢复的吗?
答案 0 :(得分:3)
不,这些变化不是“可恢复的”,因为它们可以被一个命令抓住。是的,这些变化是在git fsck中找到的,还有100多个其他旧的变化,我不得不排序。 Ick,但比完全失去更好。
需要注意的重要事项: - 只要你执行“git add”,就会记录该提交节点 - 从那一点开始就不能完全丢失 - “git rebase abort”与回滚事务不同,它更像是“git reset --hard”,它将删除在该rebase期间添加的任何新文件。 Git不会跟踪您在rebase期间所做的更改,因此它无法“撤消”它们或将它们回滚。在rebase期间,你处于无人区域,并且中止rebase是git重置回到前一个提交节点。
重新总结问题 - 我进行了一些更改,并将它们组织成单独的提交,每次提交1个功能。中途,我意识到我错过了早期(未按下)提交的一些文件。我做了一个git stash,启动了一个交互式rebase,做了一个git stash pop,将丢失的文件添加到之前的提交中,并意识到我已经将新文件添加到了错误的提交节点。然后,我做了一个git rebase --abort,它删除了那些新文件,并且通常很糟糕。
TLDR:不要在交互式rebase期间添加新文件而不先备份它们 - 如果你中止了rebase,你的文件将(大部分)丢失,并且不易恢复。
答案 1 :(得分:1)
由于文件从未添加到DAG中,因此除非您在某处获得第二个副本,否则它看起来不可恢复。但是,如果您将它们添加到索引中,则可以通过@jefromi建议git fsck --lost-found
找到它们。
更多信息:
查看reflog将显示您的分支之前指向的位置。您想将git log
用于实际历史记录。添加--stat
选项以查看每次提交时的文件更改。