我以交互方式将分支的另一个分支作为基础,然后以中间方式删除了一个提交。
现在我想要它回来。有办法撤消此删除吗?有什么方法可以查看所有提交,而不管其被删除吗?
答案 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>