🥙
[Git] エディタを開かずに変更中の内容を特定のコミットに統合する
以下のエイリアスを登録しておくと git cmfr COMMIT_HASH
で現在の変更内容を指定したコミットに統合できる。
[alias]
cmfr = "!f() { git commit --fixup \"$1\"; GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash \"$1\"^; }; f"
仕組み
変更中の内容を特定のコミットに統合するには、以下の手順を踏む必要がある。
- 現在の変更をコミット
- rebaseをインタラクティブモードで実行する
- 統合元のコミットを統合先のコミットの次の行まで移動
- 統合元のコミットのコマンドをfixupに変更
- エディタを保存して終了
やりたいことに対して手順が多すぎるので色々調べてみたら、rebaseにはautosquashというオプションがあるらしい。
これを使うと
> git commit --fixup COMMIT_HASH
> git rebase -i --autosquash COMMIT_HASH^
と実行するだけでさっきの手順の4番の状態にしてくれる。あとはエディタを閉じるだけでOK。
ここまできたらエディタを閉じるところも省略したい。ということで調べてみたら環境変数GIT_SEQUENCE_EDITOR
に:
(何もしないコマンド)を指定すると即座に保存&終了できるそう。
> git commit --fixup COMMIT_HASH
> GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash COMMIT_HASH^
これでエディタを開くことなく指定したコミットに統合できる。
入力文字数が多いのでエイリアスとして登録しておく。
[alias]
cmfr = "!f() { git commit --fixup \"$1\"; GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash \"$1\"^; }; f"
Discussion