如何重新定位到较早的远程提交?

How to rebase on to an earlier remote commit?

我有一个本地提交 A 并且我使用了 git pull --rebase origin master,所以现在 A 堆叠在最新的远程主提交之上,但我意识到我没有想要那样做,并且需要实际重新定位到 master 的早期愿景。

我发现提交哈希 earlier_commit_hash 与较早的提交相关联并做了 git pull --rebase origin earlier_commit_hash,但似乎没有任何改变(我的本地分支仍然包含 [= 之后的所有远程主提交) 13=]).

完成我需要的正确方法是什么?

来自 master 的较新提交已经是您本地历史的一部分,这就是为什么当您对较旧的提交使用 rebase 时它们将被继承。请注意,它们可能仍会被新的哈希重写,这会使情况变得更糟。

您可以试试 rebase --onto。来自联机帮助页:

       A range of commits could also be removed with rebase. If we have the following situation:

               E---F---G---H---I---J  topicA

       then the command

           git rebase --onto topicA~5 topicA~3 topicA

       would result in the removal of commits F and G:

               E---H'---I'---J'  topicA

       This is useful if F and G were flawed in some way, or should not be part of topicA.

因此,您可以使用相同的机制准确地cut-out master 上的引用和您的 branch-exclusive 提交之间的所有提交。

如果我处于你的位置并且我的分支机构在你所在的州,我会使用 of rebase --onto。这是因为它可能是最有效的 one-liner 而且我很乐意这样做。

话虽如此,您可以做的另一件事在概念上可能更简单一点,就是查看您的 reflog,找到您的分支在变基之前的提交,然后将您的分支恢复到如何在变基之前:

git reset --hard <previous-commit-id>

现在就好像您没有进行第一次变基一样,您可以继续使用最初打算使用的提交 ID 重做。