【Git】コミットをなかったことにする手順(リモートリポジトリも上書き)

git

画像ファイルが保存される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
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”, as git status would put it.

https://git-scm.com/docs/git-reset#Documentation/git-reset.txt—soft

これで指定のコミット後の状態に戻れました。

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください