1. ホーム
  2. git

[解決済み] git rebase の取り消し

2022-03-15 21:27:12

質問

git rebaseを簡単に取り消す方法を知っている人はいますか?

思い当たるのは手動でやるしかない。

  • コミットの親を両方のブランチに git checkout します。
  • そして、そこからtempブランチを作成します。
  • すべてのコミットを手作業でチェリーピックする
  • リベースしたブランチを、手動で作成したブランチに置き換える

私の現在の状況では、両方のブランチからのコミット(一方は私のもの、もう一方は同僚のもの)を簡単に見つけることができるので、これはうまくいきそうです。

しかし、私のやり方は最適とは言えず、エラーが起こりやすいと思います(自分のブランチを2つ使ってリベースしたとしましょう)。

何かアイデアはありますか?

明確にしてください。私が言っているのは、リベース中に多くのコミットが再生されたことです。1つだけではありません。

解決方法は?

最も簡単な方法は、リベースを開始する直前のブランチの先頭コミットを リフロ ...

git reflog

で現在のブランチをリセットします (ただし、リセットする前に必ず --hard オプションを使用します)。

仮に古いコミットが HEAD@{2} を ref log に追加しました。

git reset --hard HEAD@{2}

Windowsの場合、リファレンスを引用する必要がある場合があります。

git reset --hard "HEAD@{2}"

をするだけで、候補となる古いheadの履歴を確認することができます。 git log HEAD@{2} ( Windowsです。 git log "HEAD@{2}" ).

ブランチごとのリブログを無効にしていないのであれば、次のようにすればよいでしょう。 git reflog branchname@{1} リベースは最終ヘッドに再接続する前にブランチヘッドを切り離すからです。最近検証していないので、再確認しておきます。

デフォルトでは、すべてのリフロッグは非ベアリポジトリに対して有効になっています。

[core]
    logAllRefUpdates = true