LoginSignup
6
9

More than 5 years have passed since last update.

一度のコマンドで過去のコミットを修正する (git fixup)

Last updated at Posted at 2015-11-19

typoとか1行程度の変更とかすごい軽い修正を見つけた時、以前の変更にくっつけたい(fix,squash)時がある。
直前のコミットを修正したいならgit commit --amendで良いのだが、直前ではない何個か前のコミットを修正したい場合少し面倒。

一般的な流れは

git add
git commit

git stash
git rebase -i abcd12e^
# fix とか squash

git stash pop

参考:
How can I easily fixup a past commit?
git: squash/fixup earlier commit

git commit --fixupとかgit rebase -i --autosquashなどの手がかりはあるが、人それぞれいろいろなやり方でやってるし、コマンド1回でちゃんと動くやつがうまく見つからなかった。

git fixup

まだ、長い期間試してないが、数回試みて動いた一例
git fixup (Gist)

git-fixupというファイルを~/bin/などに作成して、実行権限を与える(chmod)

git add
git fixup abcd12e
# OR
git fixup HEAD^

CONFLICTが起きた場合どうなるかは未確認

スクリプト内のGIT_SEQUENCE_EDITORの変数が不要に見えたが、どうやらこれがrebaseを自動的に先に進める役割を果たしている模様(これを消すといつものrebaseのコミット履歴変更を尋ねる画面になる)

Issues

元ネタを試したらエラーになるケースがあったので、AUTOSQUASHのオプションのケースだけに削ったら思い通りに動いた。

あと、git stash --include-untrackedのオプションが付いていたが、これはけっこう危険(なので外した)
include-untrackedの良い点としてはrebase時の追加/削除されたファイルによるCONFLICTが起こりにくくなる点だが、悪い点としてはignoreされているファイルが消えてしまうという問題がある。

6
9
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
6
9