Gitコマンド入門::rebase(-i,--root)「第十四回」
rebase にリニューアル!(笑)
みなさん、こんにちは~ 今日からサブタイトル名を、restoreから、rebaseに変更しましたよ! 過去を振り返れば、そうそう、第三回で、restoreコマンドでの謎解きから始まり、それからは、怒涛の流れにのった勢いだけで、一気に、ここまで学習してきましたね。そして今回からは、新サブタイトル名の、rebaseを取り上げました。本来なら、まだまだ先にやっておくことも、たくさんあるのですが、やはり、このrebaseコマンドも、この時点で少しだけでも学習して置いた方が、宜しいかと思った次第です。restoreと同じく、rebaseは、re-xxx なんとかだけに、これもしっかり覚えて置かないと、どこかで行き詰ったときに頭が真っ白になってしまって、さらにドツボにハマることになりかねません。今のうちに少しだけでも慣れて置きましょう!
前回は、第十三回は、こちらです!
rebaseは、コミットを編集するコマンドです!
いままでの操作は、README.md ファイルの変更が主なテーマでしたね。そして、任意のコミット時点に戻せば、README.md は、いつのバージョンにも自由に戻すことができます。gitの性質のひとつでもあり、柔軟なバックアップシステムを体験、習得できたことでしょう。
そして、rebaseコマンドは、コミット履歴そのものを、一括編集するコマンドですね。[1]
コミット履歴を編集する理由は?
まあ、想像できることは、とても単純ですが、commit の整理整頓ですね。開発期間が長くなると、どこかで一度は、大掃除したくなりますよね~(笑)そもそも、git log とかで見る部分は、上位の10行程度ですからね。フォルダー構造のように、ツリー状に展開できるわけでもなく、コマンドラインのgit logは、ベタ表示ですからね。
機能別だと、こんなメニュー項目かな?
- コミットメッセージ変更
- コミット内容修正
- コミット分割
- コミットマージ「合体」
- コミット削除
それでは、初歩的なメッセージ変更から試してみましょう! 今回は、新規にフォルダーを作成して、ローカルリポジトリーを作成してみました。
$ mkdir rebase // rebase学習用の新規フォルダーを作成
$ cd rebase
$ git init // まずは、ローカルのリポジトリー作成から!
Initialized empty Git repository in /home/shiozumi/mygit/rebase/.git/
$ echo "# rebase" > README.md
$ git add README.md
$ git commit -m "1st"
[master (root-commit) 445c067] 1st
1 file changed, 1 insertion(+)
create mode 100644 README.md
git branch -M main
git remote add origin https://github.com/shiozumi-makoto/rebase.git
git push -u origin main
Username for 'https://github.com': shiozumi-makoto
Password for 'https://shiozumi-makoto@github.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 224 bytes | 224.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/shiozumi-makoto/rebase.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
$ git log --oneline
445c067 (HEAD -> main, origin/main) 1st
まっさらになって、気持ちいいですね。気持ちもリフレッシュ! また、余計な情報があると、思わぬ誤動作が起きたり、関係ないファイルや履歴も表示されて理解しずらくなるので、基本は、シンプルイズベスト! ですね。
[2]
git rebase -i コマンドで対話型での編集実行!$ git rebase -i // vi エディターが自動的に起動されます。
// ファイル名は、git-rebase-todo ですね!
// まずは、何もしないで、Quitしましょう!
// Escキーを押したら、q! で、viを終了させます!
Successfully rebased and updated refs/heads/main.
// こんなメッセージがでますね!
$ cat .git/refs/heads/main
445c067462a0b0a3cd8f21c40798dfd60750c6fb
// まあ~、現在のHEADが指しているハッシュ値が格納されているんですね。
それでは、vi で表示された画面をどうぞ!
まあ~最初なので、軽く、helpを眺めて置きましょう!(笑)
$ git log --oneline
445c067 (HEAD -> main, origin/main, origin/HEAD) 1st
git rebase -i --root
pick 445c067 1st // <-- 先頭行にカーソルがありますので、編集!
// ↓↓↓ 以下のように変更してください。
reword 445c067 1st // <-- pickを、rewordに変更したら、Esc + :wq で保存して終了!
// 更に又再び、viエディターが起動されて、変更後のコメントを求められます。
1st // <-- 現在のコメント内容!
// ↓↓↓ 以下のように変更してください。
1st reword ok! // <-- 1st の後ろに、reword ok! を、今回は追加しました!
// Esc + :wq で保存して終了!
[detached HEAD 304c8f4] 1st reword ok!
Date: Tue Feb 16 14:37:03 2021 +0900
1 file changed, 1 insertion(+)
create mode 100644 README.md
Successfully rebased and updated refs/heads/main.
// おお!無事に成功しましたね!
// では、確認しましょう!
$ git log --oneline
304c8f4 (HEAD -> main) 1st reword ok!
// ハッシュ値も変更されましたね~
さあ、これで、最初の一歩が成功しましたね。コメントが変更されて、さらに、ハッシュ値も変更されました。ということは、元の状態にも戻せるってことですね。また、今回は、--root を使いましたけど、これは、最初のコミットを編集するときにだけ使う特別な指定方法です。そもそもの指定の方法が、編集するコミットの一つ手前を設定するので、最初のコミットの前は、存在しませんからね。(苦笑)
それでは、今回はここまで! お疲れ様でした!
Discussion