⛓️

git push -f origin master をやりなおす

に公開

結論

force push 禁止しよう。
一人でもプルリク運用した方が安全。

前提

  • 中央リポジトリは github
  • master へのコミットは原則禁止し、PullRequest で運用
  • 個人無料アカウント
  • 一人プロジェクトなので、他のマシンなどに master 最新のコミットが残っていたりはしない

サマリ

  1. github のサイト上で、master にマージされた最新のPRを探す
  2. 上記 PR のマージコミットの番号を調べる
  3. 該当のコミットをローカルに fetch する
  4. そのコミットにチェックアウトしてブランチを切る
  5. そのブランチを master として force push する

状況

  • master 最新になっていないローカル master を git push -f origin master した
  • 結果、 github 上のコミット履歴が1ヶ月くらい前にタイムスリップ
  • github のサイトではプルリクやマージの状況は残っている
  • ローカルにも他のマシンにも最新のコミットがない
  • 目の前が真っ暗になった

対応

1. github のサイト上で、master にマージされた最新のPRを探す

push-f-master_1.png

2. 上記 PR のマージコミットの番号を調べる

PRのページの下の方にスクロールするとマージされたコミット番号が表示されているはず。
それをクリックするとマージコミットのページに移動する。
push-f-master_2.png
URLないし画面内のコミット番号をコピーする。
push-f-master_3.png

3. 該当のコミットをローカルに fetch する

ローカルで fetch する

git fetch origin コミット番号

fetch したコミットは FETCH_HEAD にある。

4. そのコミットにチェックアウトしてブランチを切る

git checkout FETCH_HEAD
git checkout -b 任意のブランチ名

そのブランチを master として force push する

git push -f origin 任意のブランチ名:master

はぁ、また force push するの。

Discussion