33
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gitでミスったときのリカバリー法集

Posted at

はじめに

この記事はUdon Advent Calendar 2025 - Adventarの18日目の記事です。

Gitのミス

GitHubやGitLab、Bitbucketなど、世の中にはGitを用いたバージョン管理システムが色々とあります。

今回は、それらでよくあるミスとそのリカバリー法をまとめてみようと思います。

それぞれのミスに対して、「リモートにPushする前」「リモートにPushした後」に分けて説明します。

コミットメッセージを間違えた・変更したくなった

コミットメッセージで誤字をしてしまったとか、もうちょっと詳細なメッセージにしたかったとかはよくあります。

ここでは、コミットメッセージを修正してみましょう。

リモートにPushする前

直近のコミットメッセージは以下のコマンドで変更できます。

git commit --amend -m "[変更後メッセージ]"

手順を説明します。

まず、git logでコミット履歴を確認しましょう。

$ git log
commit 66c48bd2f1f2204c53e75f1f9aca61b7f8e12811 (HEAD -> master)
Author:
Date:   Thu Dec 18 12:07:47 2025 +0900

    aaa

下の方のaaaが以前のコミットメッセージです。

先ほどの修正コマンドを実行し、もう一度履歴を確認してみましょう。

$ git commit --amend -m "bbb"
[master 3020a71] bbb
 Date: Thu Dec 18 12:07:47 2025 +0900
 1 file changed, 2 insertions(+), 1 deletion(-)
$ git log
commit 3020a71f544258305daa4f56ca89afdd64978e96 (HEAD -> master)
Author:
Date:   Thu Dec 18 12:07:47 2025 +0900

    bbb

確かにコミットメッセージが変更されています。

しかし、コミットIDが変わっていることが分かります。GitHub公式ドキュメントにもありますが、実質的に新しいコミットを作成して上書きしているようです。

また、git commit --amendだけ打つと以下のようにテキストエディタが立ち上がります。

bbb

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Dec 18 12:07:47 2025 +0900
#
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#	modified:   [path/to/file]
#
# Changes not staged for commit:
#	modified:   [path/to/file]
#

一番上の行を編集し、保存するとコミットメッセージが変更されます。修正したいコミットメッセージが長い場合などはこちらの方法を使うのがよいですね。

何個か前のコミットメッセージを変更したい場合

次は何個か前のコミットメッセージを変更してみます。

まず、以下のコマンドにより履歴を遡ります。

$ git rebase -i HEAD~n

nには戻りたいコミットメッセージが何個前なのかを入れます。

コマンドを実行するとテキストエディタ(GitLensを入れていると対話型画面)が開きます。ここで、修正したいコミットのpickとなっているところをeditに変更し、閉じます。

そうすると、そのコミットをした直後にリポジトリの状態が戻ります。なので、以下のコマンドで直前のコミット(コミットメッセージを修正したいコミット)のコミットメッセージを変更できます。

git commit --amend

その後、以下のコマンドを実行すると修正が完了し、最新位置に復帰できます。

git rebase --continue

nに指定した数によっては、複数のコミットを修正対象にすることができます。複数を指定した場合、修正したいコミットの数分git commit --amendgit rebase --continueを繰返すことで全てのコミットメッセージを修正することができます。

リモートにPushした後

リモートにPushしてしまったコミットメッセージを変更する場合、強制Pushでコミット履歴の書き換えを行います。

まずは直前のコミットメッセージを修正する場合。最初に、上記のやり方でローカルにおいてコミットメッセージを修正します。

その後、以下のコマンドを実行して古いコミットを強制的に上書きします。

git push --force origin [リモートブランチ名/HEAD]

こうすると、直前のコミットのメッセージが変更されます。

複数のコミットメッセージを修正対象をする場合は、全てのコミットメッセージを上のやり方で修正した後、同じ要領で強制Pushすることとなります。

強制Pushはリモートブランチの履歴を上書きしているので、実質的な歴史改ざんとなります。なので、複数人で共有しているブランチの場合は他の人の履歴がリモートのそれと違うものになってしまうので注意が必要です。

コミットを取り消したくなった

間違えてコミットしなくてもいいファイルをコミットしてしまったり、コミットすべきでない行を消し忘れてたり、ということもよくあります。

大きな問題がなければ修正して再度コミットすればよいですが、コミット履歴に変なものを残したくない時もあります。

ここでは、直前のコミットを取り消す方法を説明します。

リモートにPushする前

以下のコマンドを実行すればOKです。

git reset --soft HEAD^

こうすると、コミットが取り消され、変更したファイルがgit addしている状態に戻ります。

--soft--hardとすると、コミットが取り消されるだけでなく、コミットしていたファイルの状態が最後のコミット時の状態に書き換わります。

状況に応じて使い分けてください。

リモートにPushした後

基本的には適切な修正をしてそれを再度Pushした方が良いと思います。もちろんコミットメッセージには修正した旨を記載しましょう。履歴にはミスが残ってしまいますが、このあと説明する手順を踏むよりは簡単でしょう。

しかし、テスト用にハードコーディングしていたパスワードなどの情報(本来、そういった情報は外部ファイルから読み込むようにしてハードコーディングするのは避けるべきですが...)を消し忘れ、リモートにPushしてしまった、という状況などではコミットした事実そのものを消し去りたいです。

そんな時は、まず上記の手順でローカルにおいてコミットを取り消しましょう。

その後、以下のコマンドを用いてコミットを強制Pushします。

git push --force origin [リモートブランチ名/HEAD]

これでリモートのコミット履歴を消すことができます。歴史改ざんとなるので、他の人との兼ね合いにはご注意ください。

ブランチ名を変更したくなった

ブランチを切ってみたはいいものの、あとから考えてみると良くない名前だったり、ブランチ名でタイポをしていたりすることはよくあります。

ここでは、ブランチ名を変更する方法について説明します。

リモートにPushする前

リモートにPushする前なら簡単です。以下のコマンドで現在のブランチ名を変更できます。

git branch -m [現在のブランチ名] [新規ブランチ名]

ブランチ名は後で考えるとして、とりあえず仮の名前を付けておこう、というシーンは結構あると思うので、ミスの修正以外にも使えるコマンドです。

リモートにPushした後

リモートブランチ名は直接変更できません。なので、修正後の名前のリモートブランチを新規作成し、古いリモートブランチを削除するという方法を取ります。

まず、上記の手順でローカルのブランチ名を変更します。

その後、以下のコマンドでそのブランチをリモートにPushします。

git push -u origin [新規ブランチ名/HEAD]

最後に、以下のコマンドで古いリモートブランチを削除します。

git push origin :[古いリモートブランチ名]

以下のコマンドでも大丈夫です。

git push origin --delete [古いリモートブランチ名]

複数人で共有しているブランチだと他の人が参照できなくなってしまうので、事前に相談することが必要です。

おわりに

Gitを用いているとミスが発生することはどうしても避けられないでしょう。

そういったミスに備えて、Gitにはいろいろと修正手段が用意されているんだなと感じました。

それらの手段を適切に運用することが大切だと思います。

また、コミット履歴を書き換えてしまう強制Pushなどを用いると、チームメンバーのローカルブランチとリモートブランチの整合性が取れなくなってしまうので、注意が必要だなと感じました。

それではまた、明日の記事でお会いしましょう!

参考文献

コミットメッセージの変更 - GitHub ドキュメント

Git push後のコミットメッセージを変更する方法 #GitHub - Qiita

Git commit メッセージの変更方法 #Git - Qiita

[Git]コミットの取り消し、打ち消し、上書き #GitHub - Qiita

gitの修正や取消のいろいろ #Git - Qiita

【git】ブランチ名の変更方法(ローカル、リモート) #Git - Qiita

33
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?