git - 在 git interactive rebase 期间添加了新文件,中止了 rebase,新文件丢失

标签 git

我之前在几个节点上提交了 git rebase -i。我添加了一些我打算添加到该提交中的新文件。

看起来我在错误的节点上,所以我立即执行了 git rebase --abort。那些新文件现在完全消失了。在 reflogs 中,看起来像是发出了删除命令(删除文件模式 100644),但连文件名都不存在。

这看起来不太好,但我想我会问 - 这是可以恢复的吗?

最佳答案

不,这些更改不是“可恢复的”,因为它们可以通过单个命令获取。是的,这些更改是在 git fsck 中发现的,还有 100 多个我必须整理的其他旧更改。恶心,但总比完全失败好。

需要注意的重要事项: - 一旦你做了一个“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 ,您的文件将(大部分)丢失,并且不容易恢复。

关于git - 在 git interactive rebase 期间添加了新文件,中止了 rebase,新文件丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800874/

相关文章:

git - 在 git merge 冲突期间访问不同的分支

git - 如何在 Ubuntu 服务器上从 git 安装和支持 Node.js 应用程序

Git - 在错误的分支上工作 - 如何将更改复制到现有主题分支

git .ignore 不在目录中工作

git - TortoiseGit - 多个 GitHub 存储库,每个存储库具有不同的 key 对

git - 如何在github上自动提交和推送?

git - 有没有命令告诉我们哪个分支是我们的还是他们的?

python - git log --follow,gitpython方式

git - 当我切换机器或在不同平台上工作时,如何使用旧的 GPG key ?

git - 如何更正错误 : pathspec message when committing in git?