修正をやりなおす

Gitで修正をやりなおす

ここまでで、Gitでブランチを作成して、ローカルでコミットして、リモートにプッシュしてマージする一連の流れを学びました。
しかし、実際の開発では、今まで進めてきた作業のように順調に進むことばかりではありません。
時には間違ってコミットしてしまったり、やり直したくなることもあります。
ここでは、Gitで修正をやりなおす方法について学びましょう。

作業ブランチを作成する

まずは今回のGitで修正をやりなおす方法を学ぶための作業ブランチをmainブランチから作成します。
実際の開発現場では基本的にmainブランチに直接コミットをすることはありません。
作業ブランチを作成して、そこで作業を進めていく癖をつけておきましょう。

Terminal window
git switch -c git-amend-practice

ブランチを作成して、作業ブランチをgit-amend-practiceに切り替えました。
次のようなブランチの状態になります。

gitGraph
  commit
  branch git-amend-practice
  checkout git-amend-practice

直前のコミットをやりなおすための準備

次に、直前のコミットをやりなおす方法を学びます。
例えば、コミットメッセージを間違えてしまって修正したい場合や、直前のコミットの内容を変更したい場合、別なファイルを追加したい場合などに使用します。
では、直前のコミットを修正を練習するためのコミットを行います。

Terminal window
echo "吾輩は犬である、名前はまだない。" > natsume.txt

正しいのは吾輩は猫である、名前はまだない。ですが、あとで修正するので、あえて間違った内容でコミットします。

次に、natsume.txtファイルをステージングエリアに追加します。

Terminal window
git add natsume.txt

次に、コミットを行います。

Terminal window
git commit -m "なつめそうせきの小説"

ここまでで作業ブランチgit-amend-practiceにコミットが1つ追加されました。
次のようなブランチの状態になります。

gitGraph
  commit
  branch git-amend-practice
  checkout git-amend-practice
  commit id: "なつめそうせきの小説"

ここまでで、直前のコミットをやりなおすための準備ができました。

git logコマンドを実行して、コミット履歴を確認してみましょう。

Terminal window
git log
67eaba8 (HEAD -> git-amend-practice) なつめそうせきの小説
c734a1d (origin/main, main) Merge pull request #1 from ihatov08/mod_readme
9db43ce (origin/mod_readme) Fix pull request text
1532278 プルリクエストのテスト
fb9e6df Add README.md

このときに「なつめそうせきの小説」というコミットメッセージのコミットハッシュ(上記の例の場合は67eaba8)を覚えておくか、どこかにメモしておきましょう。

直前のコミットをやりなおす

この時点で「吾輩は犬である、名前はまだない。」という内容のコミットをしてしまいました。
しかし、正しくは「吾輩は猫である、名前はまだない。」です。
このコミットをやりなおして、正しい内容に修正しましょう。

テキストエディタでnatsume.txtファイルを開いて、内容を修正します。

Terminal window
吾輩は猫である、名前はまだない。

git diffコマンドを実行して、変更内容を確認します。

Terminal window
git diff

次のように表示されれば、変更内容が確認できます。

diff --git a/natsume.txt b/natsume.txt
index 9e341ee..dea78d6 100644
--- a/natsume.txt
+++ b/natsume.txt
@@ -1 +1 @@
-吾輩は犬である、名前はまだない。
+吾輩は猫である、名前はまだない。

git statusコマンドを実行して、変更があることを確認します。

Terminal window
git status
On branch git-amend-practice
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: natsume.txt

natsume.txtファイルが変更されていることがわかります。
変更内容はワーキングツリーにあるので、ステージングエリアに追加しましょう。

Terminal window
git add natsume.txt

直前のコミットをやりなおすには、git commit --amendコマンドを使用します。
このコマンドを使用すると、ステージングエリアにある変更を直前のコミットに追加して、コミットを修正することができます。

Terminal window
git commit --amend -m "夏目漱石の小説"

これで、直前のコミットが修正されました。
コミットメッセージも「夏目漱石の小説」に変更されました。
git logコマンドを実行して、コミット履歴を確認してみましょう。

Terminal window
git log
commit 21d4280b3f8fe635f9839cba11f82a2b362eea9e (HEAD -> git-amend-practice)
Author: tomoya yoshida <ihatov08@gmail.com>
Date: Mon Jul 14 08:58:06 2025 +0900
夏目漱石の小説

直前のコミットが修正されていることがわかります。
またコミットハッシュも変更されていることに注意してください。
コミットハッシュが変更されるのは、コミットの内容が変更されたためです。
これにより、Gitは新しいコミットとして扱います。
原則としてリモートリポジトリにpushしているコミットをgit commit --amendで修正することは避けるべきです。
なぜなら、リモートリポジトリにpushしたコミットを修正すると、他の開発者がそのコミットを参照している場合、他の開発者のリポジトリとの整合性が取れなくなってしまうからです。
つまり、git commit --amendはローカルでの修正に限定して使用することをおすすめします。

コミットメッセージの修正

ちなみにgit commit --amend-mオプションを指定しなかった場合、デフォルトのテキストエディタが開いて、コミットメッセージを編集することができます。
デフォルトのエディタは次のコマンドで確認できます。

Terminal window
git config --global core.editor

私はvimを使用しているので、以下のように表示されます。

Terminal window
$ git config --global core.editor
vim

vimに設定するには以下のコマンドを実行します。

Terminal window
git config --global core.editor vim