RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

コミットの修正には git commit --amend が便利

はじめに

はじめまして。新卒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を使ったことがなかった方はぜひ活用してみてください!

Copyright © RAKUS Co., Ltd. All rights reserved.