Gitで誤ってリモートリポジトリにコミットしてしまった場合、以下のサイトに記載されている「git reset --hard ハッシュ値」や「git push -f origin master」コマンドを利用することで、コミットの取消を行うことができる。
https://naomi-homma.hatenablog.com/entry/2020/08/09/120602
今回は、Gitで特定のコミット状態に戻してリモートリポジトリに反映してみたので、その手順を共有する。
前提条件
下記記事の手順を、リモートリポジトリ名=git-commit-revert-pushとして実行済であること。
やってみたこと
コミット履歴の確認
前提条件に記載した操作を行った後で、コミット履歴を確認した結果は、以下の通り。
1)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、1回分のコミット履歴が確認できる。
2) GitHub上で、リモートリポジトリのコミット履歴を確認するために「1 commit」をクリックした結果は以下の通りで、ローカルリポジトリと同様の1回分のコミット履歴が確認できる。
コミット操作(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)「git push origin master」コマンドを利用して、ローカルリポジトリの内容をリモートリポジトリに反映する。
6)「git log」コマンドで、ローカルリポジトリのGitコミット履歴を確認した結果は以下の通りで、3回分のコミット履歴が確認できる。
7) GitHub上で、リモートリポジトリのコミット履歴を確認した結果は以下の通りで、ローカルリポジトリと同様の3回分のコミット履歴が確認できる。
コミット操作(1回目)に戻す操作の実行と確認
コミット操作(1回目)に戻す操作を実行し確認した結果は、以下の通り。
1)「git reset --hard (コミットID(先頭7桁以上))」コマンドを実行することで、以下のように、指定したコミットIDに戻ることが確認できる。
なお、「git reset --hard (コミットID)」コマンドについては、以下のサイトを参照のこと。
https://qiita.com/developer-kikikaikai/items/e62c912702a28ab07360
また、戻したコミットを取り消すには、「git reset --hard ORIG_HEAD」というコマンドを実行すればよい。
https://gist.github.com/tiijima/8f5790fadc04f5fce403
2) 上記コマンド実行後に、Git Bash上で確認した結果は以下の通りで、コミットを取り消したファイル「add_file_2.txt」が削除されていることが確認できる。
3) ローカルリポジトリの内容をリモートリポジトリに反映する処理は、以下のように、「git push origin master」コマンドだと上手くいかない。
4) 強制的に反映する「-f」オプションを付与し「git push -f origin master」コマンドを利用することで、以下のように、ローカルリポジトリの内容をリモートリポジトリに反映することができる。
5) GitHub上で、リモートリポジトリのコミット履歴を確認した結果は以下の通りで、ローカルリポジトリと同様に、3回分のコミット履歴が取り消されていることが確認できる。
要点まとめ
- Gitでローカルリポジトリを特定のコミット状態に戻すには、「git reset --hard ハッシュ値」コマンドを利用すればよい。
- Gitで特定のコミット状態に戻してリモートリポジトリに反映するには、git pushコマンドを「-f」オプションを付与して実行すればよい。