🏹
Gitコマンド入門::Gitブランチ機能(rebase -i 復活)第六十四回
みなさんこんにちは! 前回に続いて、rebase をやっていきます! で、そうそう、かなり前になりますけど、git rebase -i
を学習しましたね。過去の記事をみたら、第十四回でした。えっ?!・・・今から50回も前でしたね。あの時、rebaseとmergeの学習も、なる早で取り上げたいなあ~と、考えていたんですけどね。気が付けばその間50回分も投稿していたとは、、、時の流れるのは、ほんと早いですね!
前回、第六十三回の記事はこちらから!
git本家本元の情報はこちらから!
今回からの課題は、ここを参考にしています!
3.6 Git のブランチ機能 - リベース
git rebase -i
なのか?!
何故に今回は、実は、先日の第六十二回で、merge後のmainブランチに対して、試しに、git rebase -i --root
を実行したみたところ、なんと勝手にコミットの履歴を一本化してくれました! それをちょっとご紹介してみますね。
それでは、前回の環境づくり!
// フォルダーを新規に作成します!
$ mkdir func0064 && cd $_
// いつもの git init
$ git init
// README.md を作成!
$ echo "func0064" > README.md
// add,commit
$ git add README.md
$ git commit -m "1st" // <!-- コメントは、1st
// master ブランチから、subブランチ作成
$ git checkout -b sub
Switched to a new branch 'sub'
// sub.txt を作成!
$ echo "3rd sub" > sub.txt
// add,commit
$ git add sub.txt
$ git commit -m "3rd sub" // <!-- コメントは、3rd sub
$ git switch master
Switched to branch 'master'
// ブランチ名を、master から、main に変更!
$ git branch -M main
// main.txt を作成!
$ echo "2nd main" > main.txt
// add,commit
$ git add main.txt
$ git commit -m "2nd main" // <!-- コメントは、2nd main
// ここまでは、前回と同です!
こちらにも、UPしてあります!
以下のような環境になっていればOK!
$ git log main --oneline --graph
* 886c8d3 (HEAD -> main) 2nd main
* 95f09b0 1st
$ git log sub --oneline --graph
* fb76f48 (sub) 3rd sub
* 95f09b0 1st
git merge sub を実行!
$ git merge sub
// viエディターが起動して、コメントもそのまま!
Merge made by the 'recursive' strategy.
sub.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 sub.txt
$ git log main --oneline --graph
* bed89b8 (HEAD -> main) Merge branch 'sub' into main
|\
| * fb76f48 (sub) 3rd sub
* | 886c8d3 2nd main
|/
* 95f09b0 1st
git rebase -i --root
// viエディターが起動して、例のハッシュ値が表示されます。
pick 95f09b0 1st
pick 886c8d3 2nd main
pick fb76f48 3rd sub
// 何も変更せずに、そのまま、Esc + wq
$ git rebase -i --root
Successfully rebased and updated refs/heads/main.
$ git log main --oneline --graph
* 4e88172 (HEAD -> main) 3rd sub
* 886c8d3 2nd main
* 95f09b0 1st
// rebase されていて、履歴が一本化されました!
$ git log main --oneline --graph --all
* 4e88172 (HEAD -> main) 3rd sub
* 886c8d3 2nd main
| * fb76f48 (sub) 3rd sub
|/
* 95f09b0 1st
// --all オプションを付けると、
// (sub) 3rd sub の残骸が表示されますけど・・・?
さあ、今回の動作ついては、私もよく分かりませんけど、git rebase -i
は、なんていうのかな? ある程度まで自動処理できる時は、勝手にやってくれそうです。私もたまたま、何気なくコマンドを打ったら、こんなことが起こったので、思わず何度か試しましたけど、必ず、同じ結果になりますから、完全に仕様ですね!
それでは、今回はここまで、お疲れ様でした!
Discussion