🪬

git commit --amend でコミット後の小さい修正を前のコミットにまとめる

に公開

開発中にファイルの add 忘れや、誤字脱字、修正漏れ等のちょっとしたミスをしたまま commit してしまったという経験があると思います。

「ちょっとした修正分のコミットで履歴を汚したくないなぁ」とか、「前のコミットにまとめたいなぁ」とか思ったことはありませんか。

そういった時に git commit --amend を使用することで、1 つ前のコミットを修正できます。

今回は同じような思いをした人向けに git commit --amend の使い方を紹介していきます。

amendとは

「amend 意味」などで検索すると「修正する」や「改心する」などと出てきます。

その意味のままで、git commit に --amend オプションをつけることで直前のコミットを修正できます。

修正漏れがあったファイルなどをまとめたり、逆にコミットしてしまった内容を修正したり、コミットメッセージを修正したりできます。

git commit --amend の使い方

git commit --amend は直前のコミットを修正するコマンドです。

修正といっても元々のコミットとは違うコミットを作成するため、コミット ID が変わってしまうので注意が必要です。

リモートにあるコミットに対して修正してしまうと履歴が変わってしまうため、基本的には push したら使用しないようにしましょう。

それでは具体的な使い方を紹介していきます。

追加するファイルを忘れてコミットしてしまった時

追加するファイルを忘れてコミットしてしまった場合は、以下のようにすることで新たにコミットを作らずに修正できます。

touch test1.txt
git add test1.txt
git commit -m "first commit"

↑追加するファイルを忘れた。

touch test2.txt
git add test2.txt
git commit --amend

これで test2.txt が追加され "first commit" が新しく作られました。(コミット ID が変わっている。)

誤字をしてそのままコミットしてしまった場合

コミット後の誤字に気づき、誤字だけのコミットを作成したくない場合に、git commit --amend で直前のコミットを修正することで誤字をなかったことにできます。

vi test1.txt
test1.txt
五時の修正

↑「誤字」を「五時」と間違えてしまった例。

git add test1.txt
git commit -m "second commit"

コミット後の誤字に気づいたので、修正し再度コミットする。

vi test1.txt
test1.txt
誤字の修正

↑「誤字」に修正。

git add test1.txt
git commit

これで直前のコミットが修正されました。

コミットメッセージを変更したい場合

僕が git commit --amend を知ったのは「コミットメッセージ修正」と検索して出てきたときでした。

最初はコミットメッセージを修正するオプションかと思っていましたがそれだけじゃなかったようです。

さて、コミットメッセージの修正ですが、内容の修正がなければそのままコマンドを実行し、メッセージを変更するだけです。

以下は「commit」の m が足りなかった例です。

git commit -m "third comit"
git commit --amend -m "third commit"

注意事項

コミットの修正は直前のコミットに対してだけ

git commit --amend は直前のコミットを修正するコマンドなので、2 つ以上前のコミットは修正できない点に注意しましょう。

2 つ前のコミットやそれ以上のコミットを修正したかったり、コミットメッセージを修正したいなどの場合は git rebase -i を使用しましょう。

コミットIDが変わる

また最初にも書きましたが、git commit --amend をすることでコミット ID が変わってしまうので、そこも注意が必要です。

むやみにまとめない

いくら修正できるからといって、むやみにまとめるのはやめましょう。

意味のある単位でコミットを作っていけばまとめなくてもいい場面があるかと思います。

まとめ

  • git commit --amend は直前のコミットを修正できる
  • ファイルを追加し忘れたり、小さな修正があった時などに使える
  • コミットメッセージを修正したいときに使える
  • 2 つ以上前のコミットに対しては git rebase -i を使う
  • コミット ID が変わるので push してある時は注意する
  • むやみにまとめない

ということで、git commit --amend の使い方でした。

今後はつまらないミスをコミットせずにまとめたり、修正したりできます。
ですが、そもそもつまらないミスをしたままコミットをしないように注意しましょう。

Discussion