Gitコマンド入門::rebase(-i,reword)「第十五回」
みなさんこんにちは! 前回は、ひとつだけコミットして、そのコメントを修正しましたね。今日は、2つ以上のコメントを修正してみましょう! ちなみに、git rebase --help コマンドを、入力した人は、どれだけいるか分かりませんけど、ものすごい量のテキストが出力されるので、、、こりゃ~、全部を覚えるのは大変だなあ~なんて感じると思います。こういうときこそ、体系的に、もしくは利用目的シーンに合わせて、コツコツと試していくしかないですね。
ということで、まずは、[-i | --interactive] こちらに慣れるところからですね!
尚、編集するエディターの指定は、$ git config --global core.editor
で可能です。
前回の記事はこちらから!
3つのコミット、そして3つのコメント修正から!
まあ~、プログラムでもそうですが、単体の次は、複数処理ですね。2つよりは、3つぐらいを試すと、最初、その間、最後というように、3つの要素の意味も出てきます。
それでは、早速、以下のコマンドでテスト用のリポジトリーを作成しましょう!
// 現状は、ここからスタートです!
$ git log --oneline
36bba7c (HEAD -> main) 1st
// 私は、前回の復習も兼ねて、git rebase -i --root コマンドを使い、
// コメントを元の状態に「1st」戻してみましたよ!(笑)
// では、以下、3つのコミットを追加!
$ echo '# AAA' >> README.md
$ git add README.md
$ git commit -m 'A'
$ echo '# BBB' >> README.md
$ git add README.md
$ git commit -m 'B'
$ echo '# CCC' >> README.md
$ git add README.md
$ git commit -m 'C'
$ git log --oneline
0425233 (HEAD -> main) C
61ed2a3 B
ac69810 A
445c067 (origin/main, origin/HEAD) 1st
前回覚えたコマンド、git rebase -i --root
pick 445c067 1st
pick ac69810 A
pick 61ed2a3 B
pick 0425233 C
// 古いものから、順番に並んでいますね。
// git log --oneline とは逆順になるので、一瞬、戸惑いますけど・・・
では、次に、git rebase -i 省略形で!
pick ac69810 A
pick 61ed2a3 B
pick 0425233 C
// 1st は対象外になりましたね!
// その他は、全て選択対象になっています。
次は、git rebase -i HEAD
// vi での編集画面では、noop と表示されます。
noop
// まあ~なにもしない!(苦笑)
// どのコミットも選択できていませんね。
git rebase -i HEAD^ or git rebase -i HEAD~1
// vi での編集画面では、Cのみが選択表示されています。
pick 0425233 C
// 以下は、git log --online の出力
// 0425233 (HEAD -> main) C
// 61ed2a3 B <-- HEAD~1 で、Bを指定すると、C の編集が可能!
// ac69810 A
// 445c067 (origin/main, origin/HEAD) 1st
git rebase -i HEAD^^ or git rebase -i HEAD~2
// vi での編集画面では、B+Cが選択表示されています。
pick 61ed2a3 B
pick 0425233 C
// 以下は、git log --online の出力
// 0425233 (HEAD -> main) C
// 61ed2a3 B
// ac69810 A <-- HEAD~2 で、Aを指定すると、B+C の編集が可能!
// 445c067 (origin/main, origin/HEAD) 1st
git rebase -i HEAD^^^ or git rebase -i HEAD~3
// vi での編集画面では、A+B+Cが選択表示されています
pick ac69810 A
pick 61ed2a3 B
pick 0425233 C
// 以下は、git log --online の出力
// 0425233 (HEAD -> main) C
// 61ed2a3 B
// ac69810 A
// 445c067 1st <-- HEAD~3 で、1st指定すると、A+B+C の編集が可能!
[1]
次は、ハッシュ値で選択してみましょう!git rebase -i 445c067
git rebase -i ac69810~1
git rebase -i 61ed2a3~2
git rebase -i 0425233~3
この4つは、同じ選択結果になりますね!
// vi での編集画面では、A+B+Cが選択表示されています
pick ac69810 A
pick 61ed2a3 B
pick 0425233 C
// 選択範囲は、全て同じですね。
まとめると、HEADでもハッシュ値のどちらでも指定が可能です。そして編集したいコミットがあったら、そのひとつ前のコミットを指定する。すると、それより後のコミットが、編集対象となりますね。
$ git rebase -i HEAD~3
// vi での編集画面で、pick を、reword に変更する。3つとも、pickから、reword へ
reword ac69810 A
reword 61ed2a3 B
reword 0425233 C
// 保存すると、今度は、1つのコミットに対しての新しいコメントを求められます。
A --> Aaa に変更して、ファイルを保存。[ Esc + wq ]
B --> Bbb に変更して、ファイルを保存。[ Esc + wq ]
C --> Ccc に変更して、ファイルを保存。[ Esc + wq ]
$ git log --oneline
1839466 (HEAD -> main) Ccc
9a7ea35 Bbb
41965df Aaa
445c067 (origin/main, origin/HEAD) 1st
これで、コメント一括修正ができましたね。
実際の作業でも、コメント文は、気になったときに、ちょこちょこと変えると思いますので、まずは、ここから学習ですね。そして、おそらくは、HEAD~「チルダ+数字」での指定より、ハッシュ値を使って、直接、編集したいコミットの一つ手前を指定する方が、簡単かな?
$ git log --oneline
1839466 (HEAD -> main) Ccc
9a7ea35 Bbb // <-- ここから後のコミットを選択したいなら、git rebase -i 9a7ea35~1
41965df Aaa
445c067 (origin/main, origin/HEAD) 1st
それでは今日はここまで、お疲れ様でした!
-
一意のハッシュ値+「~」チルダ+数字「そこからの相対位置」で指定できますから、いろいろ書き方はできますけど、、、直感的には、編集したいコミットのハッシュ値を指定して、その後ろに、~1 「チルダ1」を付けて実行するのが、一般的かな?! ↩︎
Discussion