はじめに
楽してこーぜ! nikkieです。
開発中はコマンドラインからgit commit
することが多いのですが、最近--amend
オプションが非常に便利と気付きました。
知ったことで開発を捗らせてくれているgit commit --amend
の世界へ、皆さまをご案内します。
目次
- はじめに
- 目次
- 伝えたいこと:git commit --amendで簡単にコミットを修正できるぞ
- git commit --amendとは(Git Guidesより)
- nikkieとgit commit --amend
- このアウトプットを機に知った--no-edit
- Oh Shit, Git!?!でも紹介
- 終わりに
伝えたいこと:git commit --amend
で簡単にコミットを修正できるぞ
--amend
オプションを付けると、直前1のコミットを修正できます。
以下のシーンで使えます:
- 直前のコミットのコミットメッセージを修正したいとき:
git commit --amend
- 直前のコミット自体に変更を追加したいとき
- 加えたい変更をステージング
git commit --amend --no-edit
git commit --amend
とは(Git Guidesより)
いろいろできるgit commit
コマンド。
GitHubが公開しているGit Guidesを参照してみましょう。
この記事で取り上げる--amend
については「Updating Commits With Git Commit Amend(git commit amendでコミットを更新する)」にあります。
While
git commit --amend
does change history, it only changes the most recent commit on your current branch.
(意訳) git commit --amend
は歴史を改変するけれども、変えるのは現在のブランチの最新のコミットだけだ
次のコミットにamendがめっちゃ便利(extremely useful)と紹介しています。
- リモートにまだpushされていないコミット (Haven't been pushed to the remote yet)
- コミットメッセージにスペルミスがあるコミット (Have a spelling error in the commit message)
- 含めたい変更を含んでいないコミット (Don't contain the changes that you'd like to contain)
nikkieとgit commit --amend
--amend
は直前のコミットメッセージの修正だと長いこと思い込んでいました。
直前のコミット自体が修正できると気付いたのは、ふとした偶然です。
次のコミットに含めたい変更をステージングした状態で、最新のコミットメッセージのtypoに気付きました。
そこでgit commit --amend
でメッセージを編集したところ、ステージングしていた変更がありません。
コミットメッセージだけを修正したのではなく、コミット自体を修正していたのです!
これに気付いてからはコミットを作るときに、より肩の力が抜けるようになりました。
コミット自体はgit rebase -i
で修正できるのでたまにrebaseすることがありました。
これを最新のコミットについてやるのはちょっと手数が多いため、頻繁に使わなくてもいいように確認してコミットしていました。
しかし、git commit --amend
を知った今、確認を一切しなくてもコミットできます!
なぜなら、直すのはめっちゃ簡単だからです。
このアウトプットを機に知った--no-edit
変更をステージングした状態でgit commit --amend
するとコミットメッセージの編集に入ります。
--no-edit
オプションを指定すると、これをスキップできることをドキュメント2を追っていて知りました!
Use the selected commit message without launching an editor.
For example,git commit --amend --no-edit
amends a commit without changing its commit message.
(意訳) エディタを立ち上げることなく、選択されたコミットメッセージを使う。
例えば、git commit --amend --no-edit
はコミットメッセージを変えることなくコミットを修正する
コミットメッセージ編集用のエディタを閉じるという手数が減るので、ますます気軽にコミットできます🙌
Oh Shit, Git!?!でも紹介
少し前にTwitterで回ってきた「Oh Shit, Git!?!」3にも--amend
の紹介がありました4。
- くっそー、さっきのコミットメッセージ変えたいんだけど!
- 👉
git commit --amend
- 👉
- くっそー、コミットしたばっかだけど、あと1個だけ入れなきゃいけない微修正あったの気づいちゃった!
- 👉
git commit --amend --no-edit
新しいコミットを作ってから rebase -i して一つのコミットにまとめてもいいんだけど、このほうが100万倍速いよね。
- 👉
終わりに
git commit --amend
が直前のコミット自体を変更していることに気付き、さらに--no-edit
オプションを知り、ますます楽々開発できそうです。
一度行った操作を簡単に変更できる(戻せたり修正できたりする)って、気張らずに操作できるので「私にとってはすごい価値だな〜」と感じます。
他にもないか探してみよう!
この記事は、Oh Shit, Git!?!にもある、以下を承知している前提で書いています。
コミットをamendするのはローカルコピーだけにしておくこと、じゃないとひどい目にあうから。
git commit --amend
で楽々コミット修正できますが、その恩恵が受けられるのはpushする前だけです。
念押しですが、ここだけはご注意ください。
- 「最新」と同じ意味で使っています↩
- https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---no-edit↩
- 上品なバージョンは https://dangitgit.com/ja だそうです。お好みでどうぞ↩
- 今回のアウトプットを機に思い出して確認しています↩