https://git-scm.com/docs/git-rebase に記載されている説明を、厳密な正確性よりも分かりやすさを優先して書き換えたものです。 git reabse の使い方に悩む方々の参考になればと思い公開します。
git rebase [--onto 接続先] 上流ブランチ [対象ブランチ]
- 対象ブランチ: 省略時はカレントのブランチが対象となる。
- 上流ブランチ: 省略時は対象ブランチに設定されたリモートブランチを使う。
- 接続先: 省略時は上流ブランチを使う。
<接続先> と <上流ブランチ> は、ブランチ名である必要はなく任意のタグ名やコミットハッシュ値でもよい。 そこを最終コミットとする仮ブランチとして扱う。
- <対象ブランチ> にスイッチし、それをカレントブランチとする
git switch <対象ブランチ>
- <カレントブランチ>の履歴に含まれる全コミットのうち、<上流ブランチ>の履歴に含まれていないコミット
git log <上流ブランチ>..HEAD
をリベースによる移動対象として選択する。 - カレントブランチを<接続先>に強制リセットする
git reset --hard <接続先>
- 上記2で選択した移動対象コミットの内容を順番に1つづつ再コミットしてゆく。そのとき、
git log HEAD..<上流ブランチ>
に含まれる同内容のコミットはスキップされる
git rebase main
main..HEAD
の差分コミットを退避し- カレントブランチをmain最新コミットに強制リセットし
- 退避した差分コミットを適用する.
git rebase main featX
- カレントブランチを featX に切り替え
main..featX
の差分コミットを退避し- featX をmain最新コミットに強制リセットし
- 退避した差分コミットを適用する.
git rebase --onto tag3 main featX
- カレントブランチを featX に切り替え
main..featX
の差分コミットを退避し- featX をtag3コミットに強制リセットし
- 退避した差分コミットを適用する.
git rebase --onto tag3 featX~3 featX
- カレントブランチを featX に切り替え
featX~3..featX
の差分コミットを退避し- featX をtag3コミットに強制リセットし
- 退避した差分コミットを適用する. featX~3以前のコミット
main..featX~4
は適用されない.