はじめに
はじめまして。新卒1年目のtakaramです。
今回は、Gitのコミットで失敗した時に便利な「git commit --amend
」コマンドをご紹介します。
目次
git commit --amend とは
その前に、そもそも amend という単語自体あまり耳慣れないかもしれません。辞書によれば、"amend"=「修正する、改める」という意味です。
そしてgit commit --amend
もまさに「直前のコミットを修正する」ためのコマンドなのです。
このコマンドでできること
このコマンドで出来るのは、
- コミットメッセージの修正
- コミット内容を後から追加
の2点です。以下で実際の使い方を説明していきますが、その前に大事なことを。
今から紹介する方法を使っていいのはpushする前のコミットを修正したいときだけです!
push済みのコミットを修正してしまうと、禁断のコマンドgit push -f
を使わざるを得なくなります。自分しか使わない個人リポジトリなら別ですが、そうでなければ別の方法を使ってください。
コミットメッセージの修正
コミットした後でコミットメッセージに誤字を発見したり、「もう少しわかりやすく書き直したいな」と思うこともあると思います。 そんなときは以下のようにします。
$ git add A $ git commit -m "誤字を含むコミット" [master (root-commit) 7033548] 誤字を含むコミット 1 file changed, 1 insertion(+) create mode 100644 A $ git log --oneline 7033548 (HEAD -> master) 誤字を含むコミット $ git commit --amend -m "修正されたコミット" [master 6fd014d] 修正されたコミット Date: Fri Nov 8 17:00:03 2019 +0900 1 file changed, 1 insertion(+) create mode 100644 A $ git log --oneline 6fd014d (HEAD -> master) 修正されたコミット
git commit --amend
を実行した後では「誤字を含むコミット」がなくなり、「修正されたコミット」だけになっています。
-m
オプションを付けない場合、修正前のコミットメッセージが入力された状態のエディタが開きます。
長いメッセージの一部だけを修正する場合はこちらの方が便利ですね。
コミット内容を後から追加
- コミット後に追加で修正を行った
git add
し忘れたファイルがあった- 一時コミットを残したくない
といった時にもgit commit --amend
が活躍します。
以下は「ファイルA、Bを修正したが、Aをgit add
し忘れた」といった場合の例です。
$ git add B $ git commit -m "AとBを修正" [master db4514a] AとBを修正 1 file changed, 1 insertion(+) $ git status ブランチ master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: A no changes added to commit (use "git add" and/or "git commit -a") $ git add A $ git commit --amend --no-edit [master 0469077] AとBを修正 Date: Fri Nov 8 17:31:15 2019 +0900 2 files changed, 2 insertions(+), 1 deletion(-)
この例では、--no-edit
オプションを使い前回のコミットメッセージのままコミットしています。このオプションを外せば前節と同様コミットメッセージの変更も可能です。
このコマンドでできないこと
コミットからファイルを削除する
コミットに追加することはできますが、既にコミットに含まれた修正を外すことはできません。これがしたい場合はgit reset
を使うことになります。
※git reset
についてはこちらの記事をご覧ください
2つ以上前のコミットを修正する
あくまで直前のコミットを修正するコマンドなので、これ単独では2つ以上前のコミットは修正できません。これがしたい場合はgit rebase -i
と組み合わせて使います。
おわりに
直前のコミットの内容を修正できるgit commit --amend
の紹介でした。
念のためもう一度言いますが、これはpush前のコミットに対してのみ使うようにしてください。既にpushしてしまった場合は新しいコミットを作りましょう。コミットメッセージの修正は諦めてください。
今回紹介した内容は、最低限のGit操作には必須ではないものの、やはりコミット履歴もできればキレイにしておきたいものです。今までgit commit --amend
を使ったことがなかった方はぜひ活用してみてください!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
https://rakus.hubspotpagebuilder.com/visit_engineer/rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com