0

git rebase最近実行したいくつかのブランチを含むローカル ref があります。

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提案されているように使用し、2 つのリベースが発生する前に元の状態に戻してから、提案したようにしようと考えました。 git reset --hard HEAD@{#}git rebase branchname --no-ff

私の究極の質問はこれです(いくつか追加):

最初のコミットの前に最後のコミットまで戻ることはできますrebaseか?それとも、各リベースを個別にロールバックする必要がありますか? トップブランチのそれぞれは、私が持っていたものとまったく同じですか (私が探している高速転送されていないマージを示しています)? 私はこれを難しくしすぎていますか/これを行う簡単な方法はありますか? 私が考えるのを怠っていることはありますか?

ありがとう。

4

2 に答える 2

3

各ブランチを、そのブランチのリベースが発生する前にあったコミットにリセットすると、リベースが発生しなかったようになります。各ブランチには、他のブランチとは独立した独自の履歴があるため、各ブランチを個別にリセットする必要があります。

于 2012-01-06T17:01:30.773 に答える
0

をご覧くださいgit reflog。以前の参照があります。git reset --hard HEAD@{2}HEADが指している最新の2番目のコミットを取得するには、reflogからコミットにリセットできます。同じことがブランチにも当てはまります。

あなたもそのようにそれらをチェックアウトせずにそれを行うことができます:

git push . +topic1@{1}:topic1
git push . +topic2@{1}:topic2
于 2012-01-06T19:07:25.920 に答える