';git重置——硬';多个重基分支

';git重置——硬';多个重基分支,git,branch,git-rebase,git-reset,Git,Branch,Git Rebase,Git Reset,我有一个本地ref,其中包含我最近在上执行的几个分支git-rebase: A---B---C---D master \ E---F---G topic1 \ H---I---J topic2 它变成了: A---B---C---D master \ E'---F'---G' topic1 \

我有一个本地ref,其中包含我最近在上执行的几个分支
git-rebase

A---B---C---D master
     \
      E---F---G topic1
               \
                H---I---J topic2
它变成了:

A---B---C---D master
             \
              E'---F'---G' topic1
                         \
                          H'---I'---J' topic2
通过使用以下一组命令:

git checkout topic1
git rebase master
git checkout topic2
git rebase topic1
问题出在哪里? 我不小心忘记了做git-rebase--no-ff,以便跟踪我以前合并的所有分支。现在,我无法轻松地(通过使用
gitk--all
)判断合并发生在哪里。我知道它们发生在
HEAD{E}
HEAD{J}
之间的某个地方,但是如果不逐一检查每个提交,我就迷路了

我决定做的是: 因此,我想我会按照建议使用
git reflog
,以及
git reset--hard HEAD@{#}
来恢复到两个基准发生之前的原始状态,然后尝试按照我的建议
git rebase branchname--no ff

我的最终问题是(还有几个附加问题): 我可以简单地返回到第一次
重设基础之前的最后一次提交,还是需要分别回滚每个重设基础?每个顶级分支是否与我以前的分支完全相同(显示我正在寻找的非快进合并)?我是不是让这件事太难了/有没有更简单的方法?有什么我忽略考虑的吗


谢谢。

如果您将每个分支重置为在该分支的重新基址发生之前它所在的提交状态,那么就好像重新基址从未发生过一样。每个分支都有自己独立于任何其他分支的历史记录,因此您将需要单独重置每个分支。

如果您将每个分支重置为在该分支的重新基址发生之前它所在的提交状态,那么就好像重新基址从未发生过一样。每个分支都有自己独立于任何其他分支的历史记录,因此您需要单独重置每个分支。

请查看
git reflog
。它有以前的参考文献。您可以通过执行
git reset--hard HEAD@{2}
从reflog重置为提交,以获得HEAD指向的第二个最新提交。分支机构也是如此

您甚至可以这样做,而无需检查:

git push . +topic1@{1}:topic1
git push . +topic2@{1}:topic2

请查看
git reflog
。它有以前的参考文献。您可以通过执行
git reset--hard HEAD@{2}
从reflog重置为提交,以获得HEAD指向的第二个最新提交。分支机构也是如此

您甚至可以这样做,而无需检查:

git push . +topic1@{1}:topic1
git push . +topic2@{1}:topic2

工作起来像个魔咒,重置了一切。。。我尝试的
git-rebase-no-ff-master
没有像我预期的那样工作-结果我需要使用
git-rebase-p-master
来保留合并。谢谢你的帮助,一切都很顺利。。。我尝试的
git-rebase-no-ff-master
没有像我预期的那样工作-结果我需要使用
git-rebase-p-master
来保留合并。谢谢你的帮助。