変更内容の取得
例えば、main
と develop
ブランチがあるとします。
main
ブランチの変更を develop
ブランチに取り込んで、develop
ブランチをPush、PR を作成して、マージする場合、rebase
はとても役に立ちます。
図にすると以下のような形です。
使い方
現在、main
ブランチにいると仮定して、remote にある変更内容を local に pull します。
git pull origin main
次に、develop ブランチへ切り替えます。
git checkout develop
ここで、main
ブランチの変更内容を develop
ブランチに統合します。
これにより、develop
の変更が、main
の最新変更の上に再配置されます。
git rebase main
ここで、CONFLICT が発生した場合、コンフリクトの原因を解決し、変更内容をステージングしたら、以下のコマンドで rebase を続行します。
git rebaes --continue
rebase が完了したら、変更をリモートの develop
ブランチに Push します。リベースは履歴を変更するため、通常の Push ではエラーが発生します。そのため、この場合、force push する必要があります。
git push origin develop --force
他にも
今回は rebase の話なので紹介はしませんでしたが、同様なコマンドに、git merge
があります。
git merge
にするか、git rebase
にするかは度々議論になるので、チーム開発などでは要確認することが必要です。
コミットを1つの commit にまとめたい
Rebase コマンドの入力
以下のようなコマンドを入力します。
git rebase -i [まとめたい commit の範囲]
ここで、[まとめたい commit の範囲]
の値は以下のように場合分けできます。
直前(HEAD)から n 個前の commit をまとめたい
ここで、n は自然数です。
git rebase -i HEAD~n
HEAD 以外の範囲
コミットの選択
エディタが開き、選択したコpick 1234567 古いコミットメッセージ
pick abcdef0 次のコミットメッセージ
pick 1a2b3c4 最新のコミットメッセージ
ミットが表示されます。
pick 1234567 古いコミットメッセージ
pick abcdef0 次のコミットメッセージ
pick 1a2b3c4 最新のコミットメッセージ
ここで、まとめたいコミット以外を pick
-> squash
に変換します。
pick 1234567 古いコミットメッセージ
squash abcdef0 次のコミットメッセージ
squash 1a2b3c4 最新のコミットメッセージ
保存すると、再度エディタで以下の内容が表示されます。
# This is a combination of 2 commits.
# The first commit's message is:
古いコミットメッセージ
# This is the 2nd commit message:
次のコミットメッセージ
# This is the 3nd commit message:
最新のコミットメッセージ
# Please enter the commit message for your changes. Lines starting
これを最適なコミットメッセージに編集します。
今回は、「最新のコミットメッセージ」にまとめたいので、以下のようにまとめます。
最新のコミットメッセージ
# Please enter the commit message for your changes. Lines starting
これを保存すれば、最新のコミットにまとめることができます。
rebase を中止したい
git rebase --abort
で、rebase を中断して元に戻ることができます。