画像ファイルが保存されるpublic/uploadsディレクトリはgit管理対象から外したかったが、.gitignoreファイルに記載し忘れたままコミットしてリモートpushしてしまいました。
コミットを遡り、管理対象から外した状態で再度コミットし、リモートへは上書きする方法で対処できました。
コミットを遡る
$ git reflog
d4138fc (edit-users) HEAD@{0}: commit: edit users
a3dd946 (login) HEAD@{1}: checkout: moving from master to edit-users
a3dd946 (login) HEAD@{2}: checkout: moving from edit-users to master
.
.
遡りたい時点のコミットを探す。 上の例では”a3dd946″
$ git reset --soft a3dd946
--soft
で作業ツリーはそのままでリセットされます。
--hard
だと全て元に戻るそうですが、他の箇所は元に戻したくないので今回は--soft
を使用しました。
–soft
https://git-scm.com/docs/git-reset#Documentation/git-reset.txt—soft
Does not touch the index file or the working tree at all (but resets the head to<commit>
, just like all modes do). This leaves all your changed files “Changes to be committed”, asgit status
would put it.
これで指定のコミット後の状態に戻れました。
gitリモートリポジトリへ上書き
最後にリモートリポジトリに反映します。
通常のpushではなく-f
オプションで前回のコミットを上書き
$ git push -f
リモートと不整合があるとおかしくなるので-f
は気をつけて使ってください。とのことです。
This flag disables these checks, and can cause the remote repository to lose commits; use it with care.
https://git-scm.com/docs/git-push#Documentation/git-push.txt–f