「git rebase --continue」を忘れて「git commit」しました。直し方?


112

私はgitでコードをリベースしていましたが、マージの競合が発生しました。私は衝突を解決しました:

git add

この時点で、忘れていました。

git rebase --continue

私はコーディングを続け、次のことを行いました:

git commit

変更のため。今私はオンになってい"no branch"てできません:

git rebase --continue 

どうすれば修正できますか?


#現在、どのブランチにもありません。コミットするものは何もありません(作業ディレクトリはクリーン)
Abhilash

回答:


5

編集:以下の答えも見て、それがあなたにとってより簡単な解決策であるかどうかを確認してください。 https://stackoverflow.com/a/12163247/493106


私はそれを試さなければならないでしょうが、これは私が何をするかだと思います:

  1. 最新のコミットにタグを付けます(または、SHA1をどこかに書き留めて、失わないようにします)。 git tag temp
  2. git rebase --abort
  3. 再度リベースを行います。マージを再度解決する必要があります。:(
  4. git rebase --continue
  5. git cherry-pick temp

これに関する問題は、あなたのtempコミットがおそらくマージの解決と新しいコードの両方を含んでいることです。だからそれはトリッキーかもしれませんが、私はそれを試してみて、それがうまくいくかどうか見てみます。


@MatrixFrogが言うようにタグを付けるか、パッチとして保存することもできます。次に、リベースの中止を行います。ステータスをチェックして、リポジトリが問題がないことがわかっている状態であることを確認し、フェッチとリベースを開始します。
yasouser

17
これを行わないでください。より簡単でクリーンな方法については、以下のキリカザの回答を参照してください。チェリーピックをいじったり、競合を解決したりしないでください。
tandrewnichols 2013

4
@Abhilashキリカザの答えを受け入れてください。私は(tandrewnicholsと同様に)これを行いましたが、はるかに簡単な方法がありました(そして、その回答には4倍の賛成票があるため、インターネットは同意するようです)。
David Doria

現在は賛成投票の10倍になっています...また、git rerereを使用して競合の解決を覚えておいてください(記憶したくない悪い解決を時々行わない限り便利です)。
アヤックス

216

ただしてくださいgit reset --soft HEAD^。HEADポインターを親に移動しますが、作業ツリーは保持し、マージ変更をインデックスに追加します。したがってgit rebase --continue、以前と同じようにリベースを続けることができます。


1
これは完全に機能し、--softの使用法を初めて発見したときでもありました。それがどのように機能するかを知ってうれしい、ありがとう!
mmocny 2013年

1
私は人々がこの回答に対するすべての賛成票を見て、ここで提案されているものに従ってくれることを願っています!
ラグー2017年

1
これはまさに私が考えたことです(しかし、偶然に大成功したかもしれません)。ただし、リベース中にHEADが更新されているかどうかはわかりませんでした。確認ありがとう!上記の頭痛をいじる前に、もう少しスクロールしてよかったです。
DeezCashews 2017

承認された回答を編集して、ここにリンクを配置しました。上記の手順を実行するまで、この回答は表示されませんでした。
xaxxon

0

同じ問題が発生し、さらに悪いことに、3つのコミットをリベースしており、2番目のコミットで競合を解決した後、「rebase --continue」ではなく「commit」しました。

その結果、私はこのgit reflogを持っていました

kirikazaのソリューションを適用すると、2番目のコミットではなく3番目のコミットを元に戻したため、問題が発生しました。

ご覧のように、リベースはremotes / origin / masterブランチからのチェックアウトから始まり、reflogの前の3つの操作(チェックアウト前)として表示される3つのコミットを適用します。

次に、リベースの前にクリーンベースから再起動する場合は、リベース操作のチェックアウトの直前にハッシュにハードリセットするだけです。私の場合(写真を参照):

git reset --hard 859ed3c

その後、新しいを開始できますgit rebase


0

私はgitをリベースし、競合を修正し、競合を含むファイルをgitで追加し、(誤って)コミットしました。

私が試したgit reset --soft HEAD^git reset --hardソリューション与えられたが、どちらも私のために働いていません。

しかし、git rebase --abortうまくいきました。クリーンな作業ツリーでリベースを開始する前に戻りました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.