LoginSignup
1

More than 5 years have passed since last update.

コミットメッセージでどのコミットへfixup/squashするかを予め予約する方法

Last updated at Posted at 2018-08-11

ユースケース

過去のコミットへrebaseして混ぜ込みたいコミットがある(例えばtypo、軽微なバグ修正など)。
しかし今すぐにはしたくない(他の人とブランチ状態を共有している、レビュー中は修正したという経緯も残しておきたい、rebaseはプルリクをマージする直前にのみ行いたいなど)。
が、"Fix typo"など適当に書き残すとどのコミットへ混ぜ込むのか忘れてしまうのが辛い。

ソリューション

gitのそれ向きの機能を使う。

1. rebaseして混ぜ込みたいコミットを作成するとき、以下のようにコマンドを実行する

git commit --fixup ${混ぜ込み対象のコミットのSHA}
// または
git commit --fixup :/${混ぜ込み対象のコミットのメッセージに含まれるキーワード}
// ↑ 複数のコミットが該当する場合は直近のものが優先される

// fixupじゃなくてsquashしたいときはこう
git commit --squash ${混ぜ込み対象のコミットのSHA}

2. rebaseするときに--interactive --autosquashオプションをつける

git rebase --interactive --autosquash master

すると、interactiveモードの初期状態が通常と変わる。
具体的には1で作成したコミットが混ぜ込みたいコミットの直後に移動して、かつ行の先頭のモード指定がpickからfixupへ変更される。

※ 現状では--interactiveなしに--autosquashは使用できないようなので注意

おまけ

以下でautosquashオプションをデフォルト有効にできる

git config --global rebase.autosquash true

参考

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
1