☃️

pushした後にコミットを削除してしまったケース

2023/12/02に公開

問題1

今回、add, commit ,pushした後に、誤りに気づき、commitの取り消しを行ってしまいました。
その結果、git pushを行うと、

# git push

To https://github.com/name/XXX.git
 ! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'https://github.com/name/XXX.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

このようなエラーが起きてしまい、pushできなくなってしまいました。

解決策

強制push

git push -f

fとはforceの略で、「強制」という意味です。
強制的にpushすることができます。
しかし、個人開発ではあまり問題はありませんが、チーム開発を行なっている時は使用に注意しましょう。


問題2

無事、pushはできたのですが、pushしたい情報が間違っていました。
1つ前のcommitに戻りたいと思います。

git restore --staged .の使い方

# git status

On branch develop
Your branch is up to date with 'origin/develop'.

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
	modified:   README.md

この時はgit add .が済んでいる状態です。これをaddの前に戻したいと思います。
そこでgit restore --staged .を使います。

# git restore --staged .

On branch develop
Your branch is up to date with 'origin/develop'.

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   README.md

git checkout . コマンドは、Gitリポジトリ内の変更を取り消して、ワーキングディレクトリを最後のコミット時の状態に戻すためのコマンドです。これにより、変更されたすべてのファイルが最後のコミット時の状態にリセットされます。

そこからadd, commit, pushでやりたい状態まで完了!!

修正完了。

ご閲覧ありがとうございました。

Discussion