3
1

変更内容の取得

例えば、maindevelop ブランチがあるとします。
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 を中断して元に戻ることができます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1