1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git の git commit --fixup=amend について

Posted at

はじめに

Git の git commit --fixup コマンドを使っているときに、コミットメッセージの変更も一緒にできないかなと思って調べたら、ちょうど求めていた機能があったので、その紹介です。

--fixup について

git commit --fixup=<commit> は、指定されたコミットのコミットメッセージに接頭辞 fixup!を付けたコミットを作成するコマンドです。
これと git rebase --autosquash を併用することで、fixup で指定したコミットともう一方のコミットを合体することができます。
このとき、コミットメッセージは指定されたコミットのコミットメッセージと同じものになります。

詳しくは git commit --fixup で調べてください。

--fixup=amend について

コミットメッセージを変更したいときは git commit --amendgit rebase -i をして reword を行う、といったやり方等で対処すると思います。

さて、先頭以外のコミットの変更をした上で、コミットメッセージの変更も行いたい場合はどうするでしょうか?
やり方は色々あると思いますが、git commit --fixup=amend:<commit> を使う選択肢はかなり有用だと思います。

使い方

例として、以下のような状況を考えます。

$ git log --oneline
2e12dad (HEAD -> main) third commit
658d8d5 second commmit
616a75c first commit

ここで second commmit の内容とコミットメッセージの typo を修正したいと仮定します。
そのような場合、まずファイルの修正を行い、コミットをする際に以下のようなオプションを付けてコマンドを実行します。

$ git commit --fixup=amend:HEAD^

コマンドを実行するとエディタが開き、以下のような内容が表示されます。

amend! second commmit

second commmit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

ここで、コミットメッセージの description 部分である、3行目の second commmit の文字列を修正して、正しいコミットメッセージにして保存します。

amend! second commmit

- second commmit
+ second commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

そうすると、コミットログは以下のようになっているはずです。

$ git log --oneline
356604f (HEAD -> main) amend! second commmit
2e12dad third commit
658d8d5 second commmit
616a75c first commit

修正したいコミットメッセージに接頭辞 amend! の付いたコミットが追加されています。

この状態で git rebase --autosquash を実行します。

pick 658d8d5 second commmit
fixup -C 356604f amend! second commmit
pick 2e12dad third commit

上記は git rebase -i --autosquash HEAD~3 の結果ですが、amend! となっている部分が fixup として扱われているのが分かります。

実行後にコミットログを見ると、

$ git log --oneline
de5391c (HEAD -> main) third commit
cd852b0 second commit
616a75c first commit

となっており、コミットメッセージの変更もできていることが分かります。
勿論、fixup と同様にファイルの内容の変更もできています。

終わりに

この記事では git commit --fixup=amend:<commit> について紹介をしました。
他にも git commit --fixup=reword:<commit> という類似のオプションもあり、これはコミットメッセージの変更だけを行うオプションです。

Git のヘルプを見ると、知らなかった便利なオプションを見つけられることもあると思うので、軽く見てみると面白いかもしれません。

1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?