detached状態でmasterに-fプッシュした人がいるらしいよ
masterが突然ちぎれた対応をしたときのメモです
壊れちゃった!とヘルプを求められ、確認すると、
gitホスティングサービス上では不思議な事態が起こっていました。
こんな感じでmasterがちぎれていました
何をした結果なのか詳細は確認してないのですが、
なんらかの作業をした結果detached状態になり、
-fをつけてmasterプッシュしたのかな?という気がしています
目標は、masterを可能な限り復元することです
リポジトリの運用ルールに100%準拠していることを前提に、
そのリポジトリ利用者に、最後にmasterへマージしたdevelopを教えていただき
そこをmasterとして修正しました
手順
- (ローカルが死んでしまったため)リポジトリを新規クローン
- 最後にmasterへマージしたdevelopをcheckout
- detached状態のmasterを削除(ウワーッ)
- そのまま最後にmasterへマージしたdevelopからmasterを生やします
- 最後にmasterへマージしたdevelopと作成したmasterの最新コミットが一致することを一応確認
- -fプッシュ!
作業ログ
~/repo ❯❯❯ git branch * master ~/repo ❯❯❯ git log -1 commit !!!!!!!!FakeLastMasterCommit!!!!!!!! Author: XXXXXXXXXXXXXXXXXXX detachedしちゃったぜ! ~/repo ❯❯❯ git checkout last-develop Checking out files: 100% (6341/6341), done. Branch last-develop set up to track remote branch last-develop from origin. Switched to a new branch 'last-develop' ~/repo ❯❯❯ git log -1 commit !!!!!!!!RealLastCommit!!!!!!!! Merge: piyyoyo honyanya Author: YYYYYYYYYYYYYYYYYYYYYY 最後にmasterマージしたdevelopの最新コミットだよ ~/repo ❯❯❯ git branch -d master warning: deleting branch 'master' that has been merged to 'refs/remotes/origin/master', but not yet merged to HEAD. Deleted branch master (was hogege). ~/2/repo ❯❯❯ git checkout -b master Switched to a new branch 'master' ~/repo ❯❯❯ git log -1 commit !!!!!!!!RealLastCommit!!!!!!!! Merge: piyyoyo honyanya Author: YYYYYYYYYYYYYYYYYYYYYY 最後にmasterマージしたdevelopの最新コミットだよ ~/repo ❯❯❯ git push origin -f Total 0 (delta 0), reused 0 (delta 0) To ZZZZZZZZZZZZZZZZZZZ + hogege...fugaga master -> master (forced update)
お前も-fプッシュかい!
という感じですが、そうでもしないと修正できなかったのです...
master削除とmasterへの-fプッシュは気持ち的にやりたくないです
リポジトリをforkして1回検証するくらいやりたくないです
自分がそのリポジトリの最新を落としたらローカルが死んでしまったため
旧masterの最新コミットを拾うことができず...
とはいえ、
今思えばそのリポジトリの作業者を当たれば本物のコミットを救出できた可能性はあったんだろうなー
.git/refs/heads/masterが本物のコミットだったよねー
あーやっちゃった
運用ルールに準拠していることを前提に修正したのですが
ルールがあるってありがたいね!準拠してるって信じてる!!