git rebase期间意外删除的文件。我可以重做吗?

时间:2016-12-14 13:45:15

标签: git

我在我的项目中git rebase origin/master进行了上游跟踪。

我在冲突解决期间(不是在最后一次提交中)删除了一些文件,因为我认为我的分支中不需要它们。但我确实需要它们。

我可以检查上游其他地方将这些文件复制到我的仓库并创建一个提示“抱歉”,但这并不好。我宁愿“撤消”删除。

我尝试根据this answer运行git rebase -i <parent of the deleting commit>并将删除提交标记为e进行编辑。但我没有看到任何文件上演。 我所能做的就是修改提交,只允许我根据我的知识编辑提交消息。

那么如何在我过去的提交中撤消删除?

为了简单和完整,我将添加我使用的命令集:

git rebase -i <parent_of_the_wrong_commit>
# mark e next to the deleting commit and copy its hash
git reset HEAD^
git checkout -- the/accidentally/deleted/directory
git add .
git commit -c <the_copied_hash>
git rebase --continue

2 个答案:

答案 0 :(得分:1)

使用编辑节进行交互式变基是完全正确的,你只是对提交修改感到困惑。如果向索引(git add ...)添加更改并执行git commit --amend -C HEAD,则索引的当前状态将替换之前的提交状态,这意味着您可以添加其他更改或撤消更改到最新的提交。 (-C HEAD接受HEAD提交的提交消息,因此修改后的消息,无需或无法编辑它)

答案 1 :(得分:1)

  

我所能做的就是修改提交,只允许我根据我的知识编辑提交消息。

不正确。当你编辑这样的提交时,你可以做任何你通常会做的事情。

要解决您的问题,我知道有两种最佳方法

1。中止整件事并再试一次

使用git reflog在rebase之前查找您知道的提交。然后使用git reset --hard <commit>修复master并重试。

2。按原样修复rebase

如前所述,您可以使用交互式标记修复rebase。

当您在命令行中删除已损坏的提交时,请记下提交ID(复制到剪贴板)。

然后git reset HEAD^将撤消损坏的提交并将这些更改放入您的工作目录。

现在只进行您想要的更改(git add --patch)。

使用以下任一方式对这些分阶段的更改进行提交:

  • git commit - 新提交的新邮件
  • git commit -c <commit from before> - 使用与之前相同的消息进行新提交(来自剪贴板)

然后使用git checkout -- .

清除工作目录中仍然存在的错误更改

准备好用git rebase --continue完成变基。

祝你好运

值得注意的是,提交中的更改可能不是非常原子的。如果删除与其他更改分开,则这可能是在交互式rebase期间丢弃违规提交的简单事项。