直前にpushしたコミットメッセージを変更

#はじめに
こんにちは。突然ですが皆さんはこのような経験がありませんか？


"コミットメッセージをしっかり決めずにpushしちゃった！"
"コミットメッセージにissue番号つけ忘れた！"
"コミットメッセージにadd/modifyの文字をつけ忘れた！"

誰しもとは言いませんが、pushしたコミットメッセージを編集したい時はありますよね、、、
自分は何回かあったので記事にしようとと。

##①　まずはgit log --onlineにて修正したコミットを確認
```
$ git log --online

faaa223 [add]投稿詳細ページの作成 #39    //一番新しいコミット
b79cf0e [modify]投稿一覧ページ修正 #38
640522e [modify]新規投稿ページ修正 　　　//修正したいコミット //issue番号をつけ忘れた！
```
今回は例として3番目のコミットを修正していきます。

##②　git rebase -iにて内容を修正
ここで登場するのがgit rebase -iコマンド
一番最新のコミットが1として今回変更したいコミットは3個前なので3。"HEAD~"の前に3を入れます。

```
$ git rebase -i HEAD~3
```
そうするとviエディタが起動します。

##③　viエディタにて編集
先程のコマンドを打つとこのような画面が出てきます。しかしこのままでは文字が打てないので 
i を打ちINSERTモードにします。(画面下部にINSERTと表示されます)

```
pick faaa223 [add]投稿詳細ページの作成 #39    
pick b79cf0e [modify]投稿一覧ページ修正 #38
pick 640522e [modify]新規投稿ページ修正

# 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

--INSERT-- 　　//iを打って編集モードになると表示される。
```

変更したいコミットのpickをeに変更

```
pick faaa223 [add]投稿詳細ページの作成 #39    
pick b79cf0e [modify]投稿一覧ページ修正 #38
e 640522e [modify]新規投稿ページ修正         //pickをeに変更

# 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

--INSERT-- 　　//iを打って編集モードになると表示される。
```

eに変更したらESCキーを押してコマンドモードに切り替えます。（コマンドモードに切り替えるとINSERTが消えます)

:wqを押して上書き保存して終了。


##④　git commit --amend にてコミットメッセージを変更
```
$ git commit --amend -m "[modify]新規投稿ページ修正 #37"  　　//issue番号を追加
```
これでコミットメッセージの変更が完了になります。

##⑤　git rebase --continue
```
$ git rebase --continue 
```
もし他にeに変更したコミットがある場合は順次移動します

##⑥　git log --onelineにて確認

```
$ git log --oneline

faaa223 [add]投稿詳細ページの作成 #39    
b79cf0e [modify]投稿一覧ページ修正 #38
640522e [modify]新規投稿ページ修正 #37　　　//修正完了
```

##⑦　git push -f origin ブランチ名　にて強制push

```
$ git push -f origin ブランチ名
```
-fにて強制pushしてリモート上でメッセージ変更完了

強制pushを行うときは、想定外のことが起こる可能性もあるので注意！（チーム開発をしていたり。）