概要
Gitのコミットメッセージ間違えてしまった場合の修正方法をまとめました。
環境
- macOS High Sierra
- ターミナル
直前のコミットメッセージを修正する
以下の例のように、直前のコミットメッセージを間違えてしまった場合。
直前のコミットでissueとの紐付けを忘れている
$ git log --oneline
503fd63 test: テストコードの修正
...
解決策
$ git commit --amend
コマンドを利用します。
手順
- ターミナルで
$ git commit --amend
を実行する。 - viエディタが起動する。
-
i
で編集モードに切り替える。 - コメントを修正する。
-
Esc
キーで編集モードを終了し、wq
で保存する。
$ git commit --amend
hint: Waiting for your editor to close the file...
fix: xxxxのバグを修正
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Sun Nov 4 16:56:53 2018 +0900
#
# On branch master
# Your branch is up to date with 'origin/master'.
#
# Changes to be committed:
# modified: test/widget_test.dart
修正確認
$ git log --oneline
503fd63 test: #78 テストコードの修正
...
2つ以上前のコミットメッセージを修正する
以下の例のように、2つ前のコミットメッセージを間違えてしまった場合。
```:2つ前のコミットで機能
と`昨日`をtypoしている
$ git log --oneline
33d7b8d fix: #91 ○○が重複登録できてしまうバグを修正
9a60887 feat: #89 ○○を変更する昨日を追加
86abff0 style: #12 インデントを修正
...
### 解決策
`$ git rebase -i`を利用します。
#### 手順
1. 修正対象のコミットを指定する
2. コミットメッセージを修正する。
3. `rebase`を終了する
##### 修正対象のコミットを指定する
1. ターミナルで`$ git rebase -i HEAD~2`を実行する
_※`HEAD~`のあとの数字は修正したいコミットまでの数字_
2. viエディタが起動する。
3. `i` で編集モードに切り替える。
4. 修正したいコミットメッセージの先頭にある`pick`の文字列を`edit`に書き替える。
5. `Esc`キーで編集モードを終了し、`wq` で保存する。
```:$ git rebase -i の実行結果
pick 9a60887 feat: #89 ○○を変更する昨日を追加
pick 33d7b8d fix: #91 ○○が重複登録できてしまうバグを修正
# Rebase 86abff0..33d7b8d onto 86abff0 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
#
# Note that empty commits are commented out
コミットメッセージを修正する。
-
$ git commit --amend
を実行する。 - viエディタが起動する。
-
i
で編集モードに切り替える。 - コメントを修正する。
-
Esc
キーで編集モードを終了し、wq
で保存する。
rebase
を終了する
$ git rebase --continue
を実行すると、rebase
が終了します。
※今回はedit
に変更したコミットが1つなので終了しますが、2つ以上変更している場合は次のコミット移動します
$ git rebase --continue
Successfully rebased and updated refs/heads/master.
修正確認
$ git log --oneline
33d7b8d fix: #91 ○○が重複登録できてしまうバグを修正
9a60887 feat: #89 ○○を変更する機能を追加
86abff0 style: #12 インデントを修正