2012-02-14 7 views
2

私はgit rebase masterを手伝っていました。これは3つのファイルで手作業でのマージを行っていました。git rebaseを修正してください

<<<<<<< HEAD 
======= 

>>>>>>> ... commit message 

自然にPHPのエラーが発生:そのうちの一つで、私は、ファイルの末尾に以下の結果として、末尾の改行を逃しました。私はファイルを簡単に修正することができますが、私は間違った "厄介なrebaseを修正する"コミットを追加したくありません。

この変更をリベースにどのように修正できますか?または、私はそれをキャッチすることができるrebaseを繰り返しますか?

答えて

4

この質問は基本的に「最新のものではないコミットを変更するにはどうすればよいのですか?あなたがコミットをどこにでもプッシュしていないと仮定し、さらにその履歴がそのコミットから線形であると仮定すると、かなり簡単です。

  1. 以前のコミットに適用する変更を行います。
  2. あなたが変更したい先のコミットを解説します。これらの命令のために、我々はそれを$SHAと呼ぶでしょうが、あなたはこのコミットを特定したいどんな手段も使うことができます。
  3. 実行git commit --fixup $SHA
  4. 実行git rebase -i --autosquash $SHA^

は、これはあなたのコミットの一覧でエディタを提供します。最初のコミットは$SHAであり、2番目のコミットは編集であり、それ以降はコミットの残りの部分がHEADになるはずです。このエディターを保存して閉じます。 Gitはインタラクティブなリベースを行い、あなたが変更したいコミットにあなたの変更を適用します。


もう少しマニュアルがありますが、インタラクティブなリベースがなくても使用できる代替ソリューションがあります。基本的には、直接変更したい(デタッチヘッドを作る)コミットをチェックアウトし、変更を行い、git commit --amendを実行してから、新しい修正されたコミットの上にブランチをリベースすることができます。実際にこのスタイルを好むかもしれませんが、インタラクティブなリベースの利点は、インタラクティブなリベースでもっと多くのことができるということです。たとえば、コミットの順序を変更したり、複数のコミットをまとめたり、コミットを削除したり、リワードコミットなどを行うことができます。 --fixup--squashのフラグをgit commitに使用して、実際にリベースを実行せずに実行したいこれらのアクションを記録し、完了後に戻ることができます。

+0

私が修正したいコミットはブランチの最初のコミットですか?このコミットとマスターからの最新の差分の間には、間違った行が表示されます。 – Umbrella

+0

"新しい修正されたコミットの上にブランチをリベースしてください"と説明してください。私は分離された頭の中で 'git rebase [branch]'を実行するか、 'git rebase [commit]'を実行するのか不明です。 – Umbrella

+0

@ Umbrella:あなたが修正したい行を導入するコミットは、あなたがターゲットにしたいものです。おそらくあなたの支店からの最初のコミットのようです。説明に関しては、あなたが離れた頭の上にいるときに、コミットを修正した後、 'git rebase HEAD [branch]'(ブランチをチェックアウトし、 'HEAD'修正コミット)。 –

0

変更することができますし、次にgit commit --amend

+0

これを行うと、最後のコミットで現れる行が削除されます。これは、リベースを修正することとは異なります。 – Umbrella

+0

ちなみに、私も今それをきれいにする方法を知る必要があります。 – Umbrella

+0

私は参照してください。残りのリベースは成功しましたか?もしそうなら、あなたは 'git reset --hard [不正なマージの直前にコミットしました ']を実行し、再度rebaseすることができます。あなたが私の質問に気にしないなら、軽度のコミットについては何が大したことでしょうか? – Brandan

関連する問題