はじめに
楽してこーぜ! 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 --amenddoes 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-editamends 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 だそうです。お好みでどうぞ↩
- 今回のアウトプットを機に思い出して確認しています↩