まず、なにが起きたのか
年があけて、作業開始しようとして画面の矢印部分を押してpullをしたら、知らないうちにコミットしていたものをpushしてしまった。矢印部分のマークはpullとpushを同時に実行してしまうことがわかっていなかくて、はずみで押してしまった。ミスを気がついてリバートをしたがうまく修復できないという事態になってしまった。
調査
普通のpushミスならば git revertコマンドを使えばpush前までの状態に戻すことができる。 状態を修正してミス前のソースコードと見比べていたが何かおかしい・・なぜか、revert済みソースコードと元々あった差分が生まれていた。
上の画像にも表示されているが、VSCodeで矢印部分のマークはpullとpushを同時に実行する機能がありローカルにコミットが既に存在していて下のボタンを押すことでpushがされてしまったようだ。
そのため、古い状態でのコミットがされている状態だった。
調査結果
それを初めにミスってpushした状態は古いコミットを新しくしたので初めの段階では 既に存在していた内容と同じだった。 同じにも関わらず、revertをしたのでより前の状態に戻しpushしてしまった。というのが今回の全貌になると思う。
通常commitしてからすぐ打ち消したい場合にrevertをする流れは以下のようにすれば実行できます。
revertでは指定したコミットハッシュを打ち消すコミットを新たに行うことができます。
revertは指定したコミット自体はコミット履歴から消さず、そのまま残せることが特徴です。
git revert <対象のコミットID>
今回の原因
主な原因としては以下が原因だと思われる
・ローカルにコミットを一つ持っていた。
・pullしていない状況だった
・古い状態でコミットpushしてしコミットのみしている状態のものが存在した。
・ミスに気がついてリバートする時に元々あったものと違う状態でリバーとしてしまった。
(コミットをしている状態がリモートリポジトリにある状態と同じだった。)
・よくわからないコミットを持っていた
・リバートの時の差分を確認してなかった
・不用意なプッシュをしてしまった。
・下の矢印ボタンの意味を理解していないかった。
結果
git resetを使用して新たに作成したpushを二つとも消した。 既にややこしい感じになっていたため、pushを取り消しローカルで使用していた ブランチも削除して再作成をした。以下のgit resetコマンドを使うことで直前のコミットを取り消す事ができます。
git reset --hard HEAD^
resetで取り消したことはコミットログとして残りません。