はじめに
git pull --rebase
コマンドについて、下記記事と、記事内で参考にされている記事をざっと読み、「コミットキレイになるならわかりやすくていいのでは」という考えのもと使い始めました。コミカルで面白い記事でした。
参考:https://qiita.com/yanutetsu/items/bdafe41594327a422b00
使ってみて
この履歴が
style: 文字の大きさを修正
Merge branch 'main' of github.com:...
style: ラベル修正
style: ラベル修正
Merge branch 'main' of github.com:...
style: フォームラベルの大きさを修正
こう
style: 文字の大きさを修正
style: ラベル修正
style: ラベル修正
style: フォームラベルの大きさを修正
余計なノイズが消えた印象です。
- 作業途中の場合、一度stashで作業内容を退避する必要があり、面倒に感じました。
$ git pull --rebase origin develop
error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.
-
git push
がうまくいかず、-f
オプションを使わなければならない時がありました。
git pull とgit pull --rebaseの違い
git pull
# 最初の状態
A---B---C---D (リモート)
\
E---F---G (ローカル)
# git pull後: マージコミットMが作られる
A---B---C---D (リモート)
\ \
E---F---G---M (ローカル)
全部ぐちゃぐちゃに混ぜるコミット(M)を作るのがgit pull
スープみたいだなと思いました🍲
git pull --rebase
# 最初の状態
A---B---C---D (リモート)
\
E---F---G (ローカル)
# git pull --rebase後:
A---B---C---D---E'---F'---G' (ローカル)
ローカルブランチを一部を切り取って、リモートの変更をはさんで再度切り取ったコミットをくっつけるのがgit pull --rebase
。
ローカルブランチだけに着目すると,
本来は
# git pull --rebase前:
A---B---E---F---G (ローカル)
となっていたものが
# git pull --rebase後:
A---B---C---D---E'---F'---G' (ローカル)
に変化しました。
元のE,F,Gが無くなったのでgit push -f
を使う必要がありました。
元のロープを途中で切って別物になったみたいにイメージしました🪢
最後に
git pull --rebase
を使用した感想と調査でした。個人的にはマージコミットが入らない方が好みだと感じましたが、レビュワー側がどう感じるかも気になりました。