🏹
Gitコマンド入門::Gitブランチ機能(rebase,merge)第六十三回
みなさんこんにちは! 今回も前回に続いて、rebase,mergeの学習を進めて行きますね。前回は、merge と、rebase の違いを体験しましたけど、rebase は、コマンド操作では、ひと手間多くなりますが、コミットの履歴が一本化されて、スッキリするところがメリットですね。今日は、また前回と同じ内容で、rebase を行いますが、その都度、git logで確認しながら、コミットの変化を、もう少し詳しく追ってみたいと思います。
前回、第六十二回の記事はこちらから!
git本家本元の情報はこちらから!
今回からの課題は、ここを参考にしています!
3.6 Git のブランチ機能 - リベース
git log
の確認ポイント!
rebase 操作中、手順 | コマンド | 補足事項 |
---|---|---|
rebase 直前 | main 1st, main 2nd, sub 3rd | main,sub のlog確認 |
rebase 処理後 | git rebase main | sub のlog確認 |
merge 処理前 | git switch main | main のlog確認 |
merge 処理後 | git merge sub | main のlog確認 |
いつもの環境は、前回と同じです!
// フォルダーを新規に作成します!
$ mkdir func0063 && cd $_
// いつもの git init
$ git init
// README.md を作成!
$ echo "func0063" > 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
// ここまでは、前回と同です!
rebase 直前の、main,sub のlog確認 |
$ git log main --oneline --graph
* fb5b336 (HEAD -> main) 2nd main <!-- ここに注目!
* c50954b 1st
$ git log sub --oneline --graph
* f2f80bb (sub) 3rd sub <!-- ここに注目!
* c50954b 1st
- fb5b336 2nd main ここに注目!
- f2f80bb 3rd sub ここに注目!
rebase 直後の、sub のlog確認 |
$ git checkout sub
Switched to branch 'sub'
$ git rebase main
First, rewinding head to replay your work on top of it...
Applying: 3rd sub
$ git log sub --oneline --graph
* 5704aa1 (HEAD -> sub) 3rd sub <!-- 以前の、f2f80bb から変化!
* fb5b336 (main) 2nd main <!-- mainブランチ側のコミット値そのまま!
* c50954b 1st
- fb5b336 は、rebase前の、mainブランチの 2nd コミットと同じです。
- rebase直後のコミット値、以前の f2f80bb から、5704aa1 に新しくなっています。
merge 処理前 main のlog確認
$ git switch main
Switched to branch 'main'
$ git log main --oneline --graph
* fb5b336 (HEAD -> main) 2nd main
* c50954b 1st
merge 処理後 main のlog確認
$ git merge sub
Updating fb5b336..5704aa1
Fast-forward
sub.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 sub.txt
$ git log main --oneline --graph
* 5704aa1 (HEAD -> main, sub) 3rd sub
* fb5b336 2nd main
* c50954b 1st
// Fast-forward というメッセージが表示されますが、
// その前の、sub側でのrebase処理で、既に、mainと同じなっています。
// 実際のデーターは完成済み。ブランチのコミット値を、コピーしただけですね。
まとめ
如何でしょうか? main 側で、merge する前に、sub側で、rebase のひと手間かけて置けば、main 側でのマージ処理が、Fast-forward となり履歴が一本化する。尚、実際の運用面においては、リモートmainブランチをローカルmainブランチにフェッチして置いて、小まめにローカルsubブランチ側で、git rebase main
を実行して置けば、main側でのmerge処理が楽になるってことなんでしょうね。それが、Fast-forward!
それでは、今回はここまで、お疲れ様でした!
Discussion