我知道最简单的方法是调用git reflog
找出分支的原始负责人,而不是调用git reset
旧的提交。
但是某些情况下 reflog 不可用,例如在另一台 PC 的存储库上。
有什么方法可以逆转 git rebase 并设置为旧提交?
我知道最简单的方法是调用git reflog
找出分支的原始负责人,而不是调用git reset
旧的提交。
但是某些情况下 reflog 不可用,例如在另一台 PC 的存储库上。
有什么方法可以逆转 git rebase 并设置为旧提交?
我不确定我是否理解你的问题。如果我理解正确,您对存储库进行了一些修改,编辑了历史,推送,拉到另一个存储库并想从那里撤消历史编辑?那是做不到的,因为那里没有“原始”历史。
正如你所说,git reflog
这是要走的路,我不知道为什么你不能使用它(除了我刚刚勾勒的场景)。您可以编辑您的帖子以提供更多信息吗?
在这种情况下,无法自动“撤消”变基,但您可以手动执行另一个变基。例如,如果您有:
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
只需使用(参考)ORIG_HEAD,它被设置为在变基的内部重置阶段之前指向分支的尖端。- 见手册
所以checkout ORIG_HEAD
,为它创建一个新的分支名称(不要让它成为一个独立的头),你应该在路上(检查它是否都与gitk
你最喜欢的漂亮的单线图命令连接)
当你这样做时,rebase
你正在改写历史。分支将指向不同的提交。旧的提交被丢弃。您可以列出它们git fsck --lost-found
并尝试恢复。但是,它们可用于垃圾收集,因此如果您之前已经这样做了,它们可能会无法恢复地丢失。