在git重新基址期间意外删除了文件。我可以重做吗?

在git重新基址期间意外删除了文件。我可以重做吗?,git,Git,我在我的项目上做了git-rebase-origin/master,以便与上游合作 我在冲突解决期间删除了一些文件(不是在上次提交中),因为我认为我的分支中不需要它们。但我确实需要它们 我可以在其他地方签出上游文件,将这些文件复制到我的回购协议中,并创建一个表示“对不起”的提交,但这并不好。我宁愿“撤消”删除 我尝试根据运行git-rebase-I,并用e标记删除提交以进行编辑。但我没有看到任何文件。我所能做的就是修改提交,根据我所知,这只允许我编辑提交消息 那么,如何在我过去的提交中撤消删除

我在我的项目上做了
git-rebase-origin/master
,以便与上游合作

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

我可以在其他地方签出上游文件,将这些文件复制到我的回购协议中,并创建一个表示“对不起”的提交,但这并不好。我宁愿“撤消”删除

我尝试根据运行
git-rebase-I
,并用
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
git-rebase-i
#在删除提交旁边标记e并复制其哈希
git复位头^
git checkout——目录/incomely/deleted/
git添加。
git提交-c
git rebase--继续吗

像您这样使用编辑节进行交互式重定基调是完全正确的,您只是对提交修改感到困惑。如果您向索引添加更改(
git add…
)并执行
git commit--amend-C HEAD
,则索引的当前状态将替换以前的提交状态,这意味着您可以向最新提交添加其他更改或撤消更改。(
-C HEAD
获取了
HEAD
提交的提交消息,因此修改了一个,而不需要或无法编辑它)

与编辑节的交互重定基调与您所做的完全正确,您只是对提交修改感到困惑。如果您向索引添加更改(
git add…
)并执行
git commit--amend-C HEAD
,则索引的当前状态将替换以前的提交状态,这意味着您可以向最新提交添加其他更改或撤消更改。(
-C HEAD
获取了
HEAD
提交的提交消息,因此修改了该消息,而无需或无法对其进行编辑)

我所能做的就是结束提交,根据我所知,这只允许我编辑提交消息

不是真的。当你编辑这样的提交时,你可以做任何你通常想做的事情

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

1.中止整个过程,然后再试一次 使用
git reflog
查找您在重新基址之前知道的提交。然后使用
git reset--hard
修复master并重试

2.按原样修复重基 如前所述,可以使用交互式标志修复重基

在命令行中删除已断开的提交时,请记下提交ID(复制到剪贴板)

然后,
git reset HEAD^
,它将撤消中断的提交并将这些更改放入您的工作目录中

现在只准备您想要的更改(
git add--patch

通过以下任一方式对这些阶段性更改进行提交:

  • git commit
    -使用新消息进行新提交
  • git提交-c
    -使用与以前相同的消息进行新提交(从剪贴板)
然后使用
git checkout--清除仍在工作目录中的错误更改。

这样,您就可以用
git-rebase完成重新基址了——继续

祝你好运

还值得注意的是,提交中的更改可能不是非常原子化的。如果删除与其他更改是分开的,那么在交互式重新基址期间删除有问题的提交就是一个简单的问题

我所能做的就是结束提交,根据我所知,这只允许我编辑提交消息

不是真的。当你编辑这样的提交时,你可以做任何你通常想做的事情

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

1.中止整个过程,然后再试一次 使用
git reflog
查找您在重新基址之前知道的提交。然后使用
git reset--hard
修复master并重试

2.按原样修复重基 如前所述,可以使用交互式标志修复重基

在命令行中删除已断开的提交时,请记下提交ID(复制到剪贴板)

然后,
git reset HEAD^
,它将撤消中断的提交并将这些更改放入您的工作目录中

现在只准备您想要的更改(
git add--patch

通过以下任一方式对这些阶段性更改进行提交:

  • git commit
    -使用新消息进行新提交
  • git提交-c
    -使用与以前相同的消息进行新提交(从剪贴板)
然后使用
git checkout--清除仍在工作目录中的错误更改。

这样,您就可以用
git-rebase完成重新基址了——继续

祝你好运

还值得注意的是,提交中的更改可能不是非常原子化的。如果删除与其他更改是分开的,那么在交互式重新基址期间删除有问题的提交就是一个简单的问题