過去のコミットを変更することができる git rebase -i
。
通常、git rebase -i
はコマンドラインで行いますが、Jetbrains 社の IDE(IntelliJ IDEA, PhpStorm, RubyMine など)で行う git rebase -i
がとても使いやすいので紹介します。
動作確認環境
- IntelliJ IDEA 2016.2
- PhpStorm 2016.2
目次
- 変更したいコミットのひとつ前のハッシュ番号をコピーする
- コピーしたハッシュ番号を Rebase branch の Onto に貼り付ける
- rebase の Action を指定する
- Conflict 時の強い味方 3 列 Merge
- git rebase --abort もしくは --continue したい場合は
- 3 列の Conflict 解決画面を表示したい場合は
- reword 以外の Action を指定したい場合は
コマンドラインの git rebase -i
を使ったことがある方向けに書いていますので、git rebase -i
ってなんぞや?という方は以下の記事に先に目を通しておくと良いと思います。
-
あのコミットをなかった事に。git rebase -i の使い方
以前、Gitの使い方、よく使うGitコマンド という記事を書きましたが、git rebase -i の項目に書き足したい ...
続きを見る
変更したいコミットのひとつ前のハッシュ番号をコピーする
以下のようなコミットログがあるとします。
今回は、以下のコミットログのコミットメッセージの「4」を「4edit」に変更してみます。
コミットメッセージ「4」のひとつ前のコミットを選択して右クリックし、「Copy Revision Number」を選択してコミットのハッシュ番号をコピーします。
コピーしたハッシュ番号を Rebase branch の Onto に貼り付ける
上部メニューの VCS > Git > Rebase... を選択して rebase を開始します。Rebase branch ウィンドウが立ち上がるので、「Onto」に先ほどコピーしたハッシュ番号を貼り付けます。
Interactive にチェックが入っていることも念のため確認しておきましょう。
rebase の Action を指定する
Rebase Committs ウィンドウで rebase の Action を指定します。今回はコミットメッセージを変更したいので、コミットメッセージ「4」の Action に「reword」を選択します。
ebase Committs ウィンドウの左下の窓みたいなアイコンをクリックすると、そのコミットの diff を表示することができます。
新しいコミットメッセージを入力します。
rebase が成功し、コミットメッセージが変更されました。
Conflict 時の強い味方 3 列 Merge
rebase 中に Conflict すると、以下のように Conflict したファイルが一覧表示されます。ファイルを選択して「Merge」ボタンをクリックします。
3つの列が表示され、左と右の列に Conflict したコミットが表示されます。左右の変更点を見ながら、真ん中の列を Conflict 解決後の状態にします。
git rebase --abort もしくは --continue したい場合は
上部メニューの VCS > Git > の下のほうに「Abort Rebasing」と「Continue Rebasing」があるので適宜選択してください。
3 列の Conflict 解決画面を表示したい場合は
3 列の Conflict 解決画面を閉じてしまって、もう一回呼び出したい時があると思います。
上部メニューの VCS > Git > の真ん中くらいに「Resolve Conflicts...」から呼び出すことができます。
rebase だけでなく、merge で Conflict したときや、stash から pop したときの Conflict でも使えます。
reword 以外の Action を指定したい場合は
今回は reword しか紹介していませんが、他の Action も指定できます。コミットの順番を変えたい場合は、左下の上下アイコンで。コミットを削除したい場合は「skip」Action で。Action によっては 「Continue Rebaseing」が必要になると思いますので、先ほど紹介した方法で適宜実行しましょう。
まとめ
- IntelliJ IDEA でも、ターミナルと同じように
git rebase -i ができる
git rebase --abort, --continue
もできる- 3 列 Conflict 解決が便利
- rebase 前の diff 表示が便利