GitHub に push しちゃった commit を取り消す
author を変えたいだけ
の場合にはこちらを参照いただければと。
GitHub にあげたくない情報を upload してしまった
たまにありますよね、はい。
削除する commit を打って push したとしても、履歴としては残ってしまうので対応としてはよろしくないです。
とりあえず private にする
ほんとに急ぎの場合にはとりあえず private に変更します。
とりあえず手元でバックアップをとる
この後の操作で、該当のファイル・フォルダーが一時的に消えてしまうので、repository 全体をとりあえず適当にコピーしておきます。
ちょっと気になるくらいであれば commit を修正
すでに該当の commit からいくつか commit を積んでいるときもありますよね、はい。
GitHub を前提にしているので、該当のフォルダー、ファイルをつかんで、その history を表示させます。
history は右上のリンクから表示できます。
ここで表示される commit ID は実際の ID のうちの先頭 6 文字分を示しています。
実際の commit ID は 5fe6c1284e320aaf5cc86717eff4f35d3ef33ae4
なのですが、表示されているのは 5fe6c12
までです。
で、次に git rebase -i HEAD~20
などと叩き、該当の commit を含む commit log を表示 (?) させます。
HEAD~20
の部分がどれくらい commit を遡るかを示しているので、近めの commit であれば HEAD~5
くらいでいいでしょうし、もっと古ければ HEAD~50
にするという具合です。
私の環境では nano
が立ち上がり、commit を pick するかを選べる画面が出てきます。
いくつかの commit とその commit message が並んでいますが、そのうち GitHub で確認した該当の commit を示す pick xxxxxxx ...
を削除します。
上記 GitHub のスクリーンショットでは 2 つの commit に対応しているようなので 2 行分頑張って探して消します。
該当のファイルを再度追加
commit がないことになっているので、その commit に含まれていたファイルも消えてしまっています。
これを先ほどのバックアップからコピーして戻してきます。
そのあと git add
して git commit
します。
git push
強制的に あまりほめられたことではないのですが仕方がないので remote
側を今の commit で上書きしてしまいます。
参考にある URL では git push origin +master
と書かれていますが、最近の reposiroty であれば git push origin +main
となるでしょう。
これにより、remote である GitHub 側の commit がすべて手元のものに置き換えられ、過去の commit はなかったことになります。
参考
- 日本語でわかりやすく説明されているブログ
-
git push
の help
Update log
- 全体的に
# (見出し1)
から## (見出し2)
に変更 - 2024/01/20 - commit author を変えたいだけの場合の参考リンクを追加 - 2024/01/20
Discussion