0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

間違ってpushをしてしまった場合の対象法

Last updated at Posted at 2023-01-09

まず、なにが起きたのか

年があけて、作業開始しようとして画面の矢印部分を押してpullをしたら、知らないうちにコミットしていたものをpushしてしまった。矢印部分のマークはpullとpushを同時に実行してしまうことがわかっていなかくて、はずみで押してしまった。
ミスを気がついてリバートをしたがうまく修復できないという事態になってしまった。

image.png

調査

普通のpushミスならば git revertコマンドを使えばpush前までの状態に戻すことができる。 状態を修正してミス前のソースコードと見比べていたが何かおかしい・・
なぜか、revert済みソースコードと元々あった差分が生まれていた。
上の画像にも表示されているが、VSCodeで矢印部分のマークはpullとpushを同時に実行する機能がありローカルにコミットが既に存在していて下のボタンを押すことでpushがされてしまったようだ。
そのため、古い状態でのコミットがされている状態だった。

096a5e993caabac78f9178eda92bb7b4.png

調査結果

それを初めにミスってpushした状態は古いコミットを新しくしたので初めの段階では 既に存在していた内容と同じだった。 同じにも関わらず、revertをしたのでより前の状態に戻しpushしてしまった。
というのが今回の全貌になると思う。

通常commitしてからすぐ打ち消したい場合にrevertをする流れは以下のようにすれば実行できます。

revertでは指定したコミットハッシュを打ち消すコミットを新たに行うことができます。
revertは指定したコミット自体はコミット履歴から消さず、そのまま残せることが特徴です。

git revert <対象のコミットID>

今回の原因

主な原因としては以下が原因だと思われる
・ローカルにコミットを一つ持っていた。
・pullしていない状況だった
・古い状態でコミットpushしてしコミットのみしている状態のものが存在した。
・ミスに気がついてリバートする時に元々あったものと違う状態でリバーとしてしまった。
(コミットをしている状態がリモートリポジトリにある状態と同じだった。)
・よくわからないコミットを持っていた
・リバートの時の差分を確認してなかった
・不用意なプッシュをしてしまった。
・下の矢印ボタンの意味を理解していないかった。

結果

git resetを使用して新たに作成したpushを二つとも消した。 既にややこしい感じになっていたため、pushを取り消しローカルで使用していた ブランチも削除して再作成をした。

以下のgit resetコマンドを使うことで直前のコミットを取り消す事ができます。

 git reset --hard HEAD^

resetで取り消したことはコミットログとして残りません。

まとめ

今回は色々なことが重なって起こってしまったような気もするが やっぱり、不用意なコミットはしないというのが一番いいと思う。 gitでソースコードを管理していて大体がcommitとpushがセットで使われる 事が大半で変にcommitだけをすると今回みたいな事が起きかねないので気を付けよう。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?