#はじめに
コミットメッセージの履歴の一覧を目にすると些細な表現の違いが気になってしまった。変更方法がわからなかったので改めてコミットメッセージの操作について触れてみる。
#直前のコミットメッセージを変更する
#直前のコミットメッセージの変更
git commit --amend
#ワンラインでのメッセージの変更
git commit --amend -m "変更メッセージ"
これは直前のコミットまでを修正するコマンド。
#過去に遡りコミットメッセージを変更する
git log --oneline
とコマンドを叩いて、下記のようなコミット履歴があるとする。
#ハッシュID コミットメッセージ
f234304 (HEAD -> master, origin/master, origin/HEAD) pre-commitの追加
1fb1c3b Rubocopの追加
1328f68 RSpecの実装
fc36a2b platform を追加
ce96219 init
上が最新のコミット履歴。
左のf234304
がコミットのハッシュID。
右のHEAD
は現在いるブランチ。
XXの追加
とされているのがコミットメッセージ。
今回はRSpecの実装
を追加に変更したい。
#HEADから指定の位置までを指定
git rebase -i HEAD~3
#ハッシュIDで位置を指定
git rebase -i 1328f68
HEAD~3
とは最新のコミット履歴の上から3番目まで、という意味。
1328f68
はそのまま、その位置を指定している。
vimエディッタが開くので下記の手順で記述を修正する。
#変更前
pick 53fac6e RSpecの実装
pick f997d47 Rubocopの追加
pick 8e43d8f pre-commitの追加
#変更後
edit 53fac6e RSpecの実装
pick f997d47 Rubocopの追加
pick 8e43d8f pre-commitの追加
①i
キーを押してインサートモードに切り替え
②変更したいコミットメッセージのpick
をedit
に変更
③Esc
キーを押してコマンドモードに切り替え
④:wp
キーで保存して終了
#変更したいメッセージを入力。
git commit --amend -m "RSpecの追加"
最後に最初で説明したコマンドを叩いて完了。
8e43d8f (HEAD -> master) pre-commitの追加
f997d47 Rubocopの追加
53fac6e RSpecの追加
fc36a2b platform を追加
ce96219 init
git log --oneline
で確認して変わっていればOK。
最後にgit rebase --continue
を叩いて編集を終了させて完了。
#GitHubのコミットメッセージの変更
上記の変更を行った場合、ローカルとリモートで履歴に違いが出てしまっているのでpush
できない。
#push時のエラー
To https://github.com/XXXXXX/sample_app.git
! [rejected] HEAD -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/XXXXXX/sample_app.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
git push origin HEAD
が拒否されてしまうので、-f
オプションをつけて強制実行。
git push -f origin HEAD
これでGitHub上のコミットメッセージも変更されているはず。
今回のケースは個人のリポジトリを変更しているので気にせず-f
オプションをつけてみたが、共同開発していた場合などはちょっと怖いやり方らしいので注意。
#参考元
Gitのコミットメッセージを後から変更する方法をわかりやすく書いてみた
過去にリモートへpushしたコミットのコメントを変更してみる