撤消删除提交时交互交互的基础

时间:2019-07-16 19:13:18

标签: git

我以交互方式将分支的另一个分支作为基础,然后以中间方式删除了一个提交。

现在我想要它回来。有办法撤消此删除吗?有什么方法可以查看所有提交,而不管其被删除吗?

2 个答案:

答案 0 :(得分:1)

其他答案都在正确的轨道上,但是一个很困惑,另一个答案太自鸣得意,无法帮助您了解如何处理这种情况。

rebase不会删除提交(至少不是直接删除)。它从不编辑提交(这是不可能的)。它所做的是创建新提交,并将引用移到指向新提交而不是旧提交。而且通常,尤其是当移动的ref是以前唯一能够到达旧提交的ref时,可以像旧提交一样使它变得似乎

但是,除非您采取明确的步骤强制真正删除那些提交,或者经过足够的时间使相关的reflog过期(默认情况下为一个月左右),否则不会删除任何内容。

因此,如果您要对my_branch进行基础调整,则在进行基础调整的克隆上 您可以说

git reflog my_branch

,您将获得引用先前指向的不同提交的列表。 my_branch@{1}可能是您想要的,您可以在该名称中找到所需的历史记录。

现在,reflog是临时的(尽管,如我所说,默认情况下它们会保留一段时间),并且它们是本地的(即,如果您使用远程,则不会被推送到远程)。因此,这种特定方法可能不适用于其他克隆。

当然,如果您有一个将分支推入其中且尚未强行推入基准的遥控器,则可以使用它来查找旧的历史记录-可能会以{{1} }。

(或者,您也可以类似地使用任何已撤回分支的 other 克隆,但尚未建立基准,尽管可能没有方便的远程引用。)

答案 1 :(得分:0)

让我们假设您在branch1上,而您将其重新安置在master上。

现在,当您说您在交互式变基过程中删除了提交时,这意味着您决定跳过在变基过程中将其包括在branch1中。请注意,它不会从原始分支母版中删除,并且仍然存在。

您只需要使用(在主分支上签出)查看主分支的历史记录

git log并获取提交的提交哈希。

然后,您可以使用(在branch1上进行首次签出)来选择提交。

git cherry-pick <commit-hash>