0

我知道最简单的方法是调用git reflog找出分支的原始负责人,而不是调用git reset旧的提交。

但是某些情况下 reflog 不可用,例如在另一台 PC 的存储库上。

有什么方法可以逆转 git rebase 并设置为旧提交?

4

4 回答 4

3

我不确定我是否理解你的问题。如果我理解正确,您对存储库进行了一些修改,编辑了历史,推送,拉到另一个存储库并想从那里撤消历史编辑?那是做不到的,因为那里没有“原始”历史。

正如你所说,git reflog这是要走的路,我不知道为什么你不能使用它(除了我刚刚勾勒的场景)。您可以编辑您的帖子以提供更多信息吗?

于 2012-09-05T15:08:09.543 回答
1

在这种情况下,无法自动“撤消”变基,但您可以手动执行另一个变基。例如,如果您有:

A---B---C   <-- master
 \
  D---E---F <-- feature

并重新获得:

A---B---C---D'---E'---F' <-- master

要将分支恢复到旧状态,请执行以下操作:

git checkout -b feature
git rebase --onto A C feature
git checkout master
git reset --hard C
于 2012-09-05T16:36:08.860 回答
0

只需使用(参考)ORIG_HEAD,它被设置为在变基的内部重置阶段之前指向分支的尖端。- 见手册

所以checkout ORIG_HEAD,为它创建一个新的分支名称(不要让它成为一个独立的头),你应该在路上(检查它是否都与gitk你最喜欢的漂亮的单线图命令连接)

于 2012-09-05T16:11:58.723 回答
0

当你这样做时,rebase你正在改写历史。分支将指向不同的提交。旧的提交被丢弃。您可以列出它们git fsck --lost-found并尝试恢复。但是,它们可用于垃圾收集,因此如果您之前已经这样做了,它们可能会无法恢复地丢失。

于 2012-09-05T15:59:30.990 回答