Git

Gitでコミットログや直前のコミット内容を変更してリモートリポジトリに反映してみた

Gitでコミットする際、-mオプションでコミットログを残すことができるが、「git commit --amend」コマンドで直前のコミット内容を変更したり、「git rebase -i HEAD~n」コマンドでコミットログのメッセージを変更したりもできる。

今回は、Gitで直前のコミット内容やコミットログ内容を変更してリモートリポジトリに反映してみたので、その手順を共有する。

前提条件

下記記事の手順を、リモートリポジトリ名=git-change-commit-log-pushとして実行済であること。

Gitでプロジェクトを作成しGitHubにpushしてみたGitとは、プログラムのソースコードなどをバージョン管理するためのツールで、多くの開発現場で利用されている。 また、Gitで管理し...

やってみたこと

  1. コミット履歴の確認
  2. コミット操作(2回)を実行後、2回目のコミット内容を変更
  3. コミット操作(1回目)のコミットログ変更

コミット履歴の確認

前提条件に記載した操作を行った後で、コミット履歴を確認した結果は、以下の通り。

1)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、1回分のコミット履歴が確認できる。
コミット履歴の確認_1

2) GitHub上で、リモートリポジトリのコミット履歴を確認するために「1 commit」をクリックした結果は以下の通りで、ローカルリポジトリと同様の1回分のコミット履歴が確認できる。
コミット履歴の確認_2_1

コミット履歴の確認_2_2
削除または保存していないWordドキュメントの復元方法【4DDiG Windowsデータ復元】ワード(Word)データ等のファイルを誤って削除してしまった場合は、通常はデータの復元ができませんが、4DDiGというソフトウェアを利用...

コミット操作(2回)を実行後、2回目のコミット内容を変更

コミット内容の変更を確認するため、コミット操作(2回)を実行し、2回目のコミット内容を変更後、リモートリポジトリに反映する。その手順は、以下の通り。

1) ローカルリポジトリ上で、以下のファイル(add_file_1.txt)を追加する。
直前のコミット内容変更_1_1

追加したファイルをGit Bash上で確認した結果は、以下の通り。
直前のコミット内容変更_1_2

2) 追加したファイル(add_file_1.txt)を、「git add .」「git commit -m (コミット時のメッセージ)」コマンドを利用して、ローカルリポジトリにコミットする。
直前のコミット内容変更_2

3) ローカルリポジトリ上で、以下のファイル(add_file_2.txt)を追加する。
直前のコミット内容変更_3_1

追加したファイルをGit Bash上で確認した結果は、以下の通り。
直前のコミット内容変更_3_2

4) 追加したファイル(add_file_2.txt)を、「git add .」「git commit -m (コミット時のメッセージ)」コマンドを利用して、ローカルリポジトリにコミットする。
直前のコミット内容変更_4

5) ローカルリポジトリ上で、以下のファイル(add_file_3.txt)を追加する。
直前のコミット内容変更_5_1

追加したファイルをGit Bash上で確認した結果は、以下の通り。
直前のコミット内容変更_5_2

6) 追加したファイル(add_file_3.txt)を、「git add .」「git commit --amend」コマンドを利用して、2回目のコミットログにまとめてコミットする。
直前のコミット内容変更_6_1

「git commit --amend」コマンドを実行すると、1行目にコミットログが表示され、コミットログを変更できる画面が起動することが確認できる。
直前のコミット内容変更_6_2

以下の赤枠のように、コミットログを変更する。
直前のコミット内容変更_6_3

変更後のコミットログを確定しコミットするには、viエディタの保存を確定するための「:wq」を入力する。
直前のコミット内容変更_6_4

「git commit --amend」コマンド実行後のGit Bash画面での表示結果は、以下の通り。
直前のコミット内容変更_6_5

7)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、3回分のコミット履歴のコミットログが変更されていることが確認できる。
直前のコミット内容変更_7

8)「git push origin master」コマンドを利用して、ローカルリポジトリの内容をリモートリポジトリに反映する。
直前のコミット内容変更_8

9) GitHub上で、リモートリポジトリのコミット履歴を確認した結果は以下の通りで、ローカルリポジトリと同様の3回分のコミット履歴が確認できる。
直前のコミット内容変更_9



「Envader」はLinuxコマンドやDatabase SQL等のスキルを、環境構築不要で習得できる学習サイトだった「Envader」は、ITエンジニアとしてよく使うLinuxコマンドやDatabase SQL等のスキルを、解説を読んだ上で、問題を解き...

コミット操作(1回目)のコミットログ変更

コミット操作(1回目)のコミットログを変更し確認した結果は、以下の通り。

1)「git rebase -i HEAD~n(nは最新コミットからn回前を指す)」コマンドを実行することで、以下のように、最新コミットからn回前以降のコミットログを変更対象に設定できる画面が起動することが確認できる。
コミットログの変更_1_1

コミットログの変更_1_2

以下の赤枠のように、変更したいコミット先頭の「pick」を「edit」に変更する。
コミットログの変更_1_3

変更後のコミットログを確定しコミットするには、viエディタの保存を確定するための「:wq」を入力する。
コミットログの変更_1_4

「git rebase -i HEAD~n」コマンド実行後のGit Bash画面での表示結果は以下の通りで、次は「git commit --amend」「git rebase --continue」を順次実行する必要があることが確認できる。
コミットログの変更_1_5

2)「git commit --amend」コマンドを利用して、コミットログを変更する。
コミットログの変更_2_1

「git commit --amend」コマンドを実行すると、1行目にコミットログが表示され、コミットログを変更できる画面が起動することが確認できる。
コミットログの変更_2_2

以下の赤枠のように、コミットログを変更する。
コミットログの変更_2_3

変更後のコミットログを確定しコミットするには、viエディタの保存を確定するための「:wq」を入力する。
コミットログの変更_2_4

「git commit --amend」コマンド実行後のGit Bash画面での表示結果は、以下の通り。
コミットログの変更_2_5

3)「git rebase --continue」コマンドを利用して、コミットログの変更を確定する。
コミットログの変更_3_1

「git rebase --continue」コマンド実行後のGit Bash画面での表示結果は、以下の通り。
コミットログの変更_3_2

4)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、2回目のコミットログが変更されていることが確認できる。ただし、コミット日時は変更されていない。
コミットログの変更_4

5) ローカルリポジトリの内容をリモートリポジトリに反映する処理は、リモートリポジトリのログを書き換えることになるため、以下のように「git push origin master」コマンドだと上手くいかない。
コミットログの変更_5

6) 強制的に反映する「-f」オプションを付与し「git push -f origin master」コマンドを利用することで、以下のように、ローカルリポジトリの内容をリモートリポジトリに反映することができる。
コミットログの変更_6

7) GitHub上で、リモートリポジトリのコミット履歴を確認した結果は以下の通りで、ローカルリポジトリと同様の3回分のコミット履歴が確認できる。ただし、ローカルリポジトリと異なり、コミット日時も変更されている。
コミットログの変更_7

要点まとめ

  • Gitで直前のコミット内容を変更するには、「git commit --amend」コマンドを利用すればよい。
  • Gitで特定のコミットログを変更するには、「git rebase -i HEAD~n」コマンドで変更したいコミットの「pick」を「edit」に変更し、「git commit –amend」コマンドでコミットログを変更した後で、「git rebase --continue」コマンドを実行すればよい。