Gitでコミットする際、-mオプションでコミットログを残すことができるが、「git commit --amend」コマンドで直前のコミット内容を変更したり、「git rebase -i HEAD~n」コマンドでコミットログのメッセージを変更したりもできる。
今回は、Gitで直前のコミット内容やコミットログ内容を変更してリモートリポジトリに反映してみたので、その手順を共有する。
前提条件
下記記事の手順を、リモートリポジトリ名=git-change-commit-log-pushとして実行済であること。
やってみたこと
コミット履歴の確認
前提条件に記載した操作を行った後で、コミット履歴を確認した結果は、以下の通り。
1)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、1回分のコミット履歴が確認できる。
2) GitHub上で、リモートリポジトリのコミット履歴を確認するために「1 commit」をクリックした結果は以下の通りで、ローカルリポジトリと同様の1回分のコミット履歴が確認できる。
コミット操作(2回)を実行後、2回目のコミット内容を変更
コミット内容の変更を確認するため、コミット操作(2回)を実行し、2回目のコミット内容を変更後、リモートリポジトリに反映する。その手順は、以下の通り。
1) ローカルリポジトリ上で、以下のファイル(add_file_1.txt)を追加する。
追加したファイルをGit Bash上で確認した結果は、以下の通り。
2) 追加したファイル(add_file_1.txt)を、「git add .」「git commit -m (コミット時のメッセージ)」コマンドを利用して、ローカルリポジトリにコミットする。
3) ローカルリポジトリ上で、以下のファイル(add_file_2.txt)を追加する。
追加したファイルをGit Bash上で確認した結果は、以下の通り。
4) 追加したファイル(add_file_2.txt)を、「git add .」「git commit -m (コミット時のメッセージ)」コマンドを利用して、ローカルリポジトリにコミットする。
5) ローカルリポジトリ上で、以下のファイル(add_file_3.txt)を追加する。
追加したファイルをGit Bash上で確認した結果は、以下の通り。
6) 追加したファイル(add_file_3.txt)を、「git add .」「git commit --amend」コマンドを利用して、2回目のコミットログにまとめてコミットする。
「git commit --amend」コマンドを実行すると、1行目にコミットログが表示され、コミットログを変更できる画面が起動することが確認できる。
変更後のコミットログを確定しコミットするには、viエディタの保存を確定するための「:wq」を入力する。
「git commit --amend」コマンド実行後のGit Bash画面での表示結果は、以下の通り。
7)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、3回分のコミット履歴のコミットログが変更されていることが確認できる。
8)「git push origin master」コマンドを利用して、ローカルリポジトリの内容をリモートリポジトリに反映する。
9) GitHub上で、リモートリポジトリのコミット履歴を確認した結果は以下の通りで、ローカルリポジトリと同様の3回分のコミット履歴が確認できる。
コミット操作(1回目)のコミットログ変更
コミット操作(1回目)のコミットログを変更し確認した結果は、以下の通り。
1)「git rebase -i HEAD~n(nは最新コミットからn回前を指す)」コマンドを実行することで、以下のように、最新コミットからn回前以降のコミットログを変更対象に設定できる画面が起動することが確認できる。
以下の赤枠のように、変更したいコミット先頭の「pick」を「edit」に変更する。
変更後のコミットログを確定しコミットするには、viエディタの保存を確定するための「:wq」を入力する。
「git rebase -i HEAD~n」コマンド実行後のGit Bash画面での表示結果は以下の通りで、次は「git commit --amend」「git rebase --continue」を順次実行する必要があることが確認できる。
2)「git commit --amend」コマンドを利用して、コミットログを変更する。
「git commit --amend」コマンドを実行すると、1行目にコミットログが表示され、コミットログを変更できる画面が起動することが確認できる。
変更後のコミットログを確定しコミットするには、viエディタの保存を確定するための「:wq」を入力する。
「git commit --amend」コマンド実行後のGit Bash画面での表示結果は、以下の通り。
3)「git rebase --continue」コマンドを利用して、コミットログの変更を確定する。
「git rebase --continue」コマンド実行後のGit Bash画面での表示結果は、以下の通り。
4)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、2回目のコミットログが変更されていることが確認できる。ただし、コミット日時は変更されていない。
5) ローカルリポジトリの内容をリモートリポジトリに反映する処理は、リモートリポジトリのログを書き換えることになるため、以下のように「git push origin master」コマンドだと上手くいかない。
6) 強制的に反映する「-f」オプションを付与し「git push -f origin master」コマンドを利用することで、以下のように、ローカルリポジトリの内容をリモートリポジトリに反映することができる。
7) GitHub上で、リモートリポジトリのコミット履歴を確認した結果は以下の通りで、ローカルリポジトリと同様の3回分のコミット履歴が確認できる。ただし、ローカルリポジトリと異なり、コミット日時も変更されている。
要点まとめ
- Gitで直前のコミット内容を変更するには、「git commit --amend」コマンドを利用すればよい。
- Gitで特定のコミットログを変更するには、「git rebase -i HEAD~n」コマンドで変更したいコミットの「pick」を「edit」に変更し、「git commit –amend」コマンドでコミットログを変更した後で、「git rebase --continue」コマンドを実行すればよい。