GitHubにpushしたcommit記録の削除方法
開発当初は無我夢中でGitHubにpushしてきて、
ある時、振り返るときに消したい過去がある場合って、ありますよね。
私はあります(むしろ、今)
そこでGitHubの過去のcommit記録(Commit History)を消す方法を調べました。
色々と調べたのですが、ローカルでのcommitの編集方法が多くヒットし、
なかなか目的の方法が見つからなかったのですが、
ようやく以下のブログで見つかりました。
ずくなし。 : gitでpushしたcommitを取り消す - livedoor Blog(ブログ)
きっと、もっとスマートな方法があるのだと思いますが、
現状、以下の方法でやるのがいっぱいいっぱい。
やる時は自己責任で。
自分しか使わないプロジェクト以外ではオススメしない!
実行内容
ある時点までさかのぼって、それまでのcommitを消す。
プログラム内容は現時点の状態にする。
手順
現在のローカルの状態をコピーしてバックアップする
以下の手順でコミットを消すと、そこで追加したファイルは削除されるので
後で手で戻す必要があります。
GitHub上とローカルが同じ状態であることが前提
GitHubのCommit Historyページから何個前まで遡るか確認(以下は4個前までとする)
git rebase -i HEAD~4
以下のようにコミット単位にpick行が表示される
pick c047b57 コミットメッセージ1 pick 7ad53bb コミットメッセージ2 pick 4904961 コミットメッセージ3 pick 0f4a444 コミットメッセージ4
ここで一番下のpickの行以外を削除して保存して閉じる
(全部削除してしまうとキャンセルとみなされてしまう)
以下のようなメッセージが表示される
error: could not apply 7537b39... rebuild commit log When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To check out the original branch and stop rebasing run "git rebase --abort". Could not apply 7537b39... rebuild commit log
消した行のコミットがなくなるので、現在の状態との整合性を保つ必要がある
git rebase --continue
以下のようなメッセージが表示される
マージ対象ファイル名: needs merge You must edit all merge conflicts and then mark them as resolved using git add
表示されたファイルを開いて、最新の状態が保つように編集する。
次にそれらのファイルをaddする
git add -A git rebase --continue
いつものコミットメッセージの編集画面になるので
コミットメッセージを記述して保存
更新のあったファイル数と共に以下のようなメッセージが表示される
Successfully rebased and updated refs/heads/master.
以下のコマンドで確かにコミットが削除されていることを確認できる
git log
問題なければ、GitHubに結果をpushする
git push origin +master
GitHubのCommit Historyページを見るとコミットが消えていることが確認できる!
最初にバックアップしたフォルダから
本手順実施前の状態になるよう消えたファイルなどを手動で戻してコミットし直す。
これからはこんな面倒なことが必要ないよう、
見られたくない情報はコミットしないよう気をつけよう!