helen's blog

ずっとおもしろいことしてたいな。

detached状態でmasterに-fプッシュした人がいるらしいよ

masterが突然ちぎれた対応をしたときのメモです

壊れちゃった!とヘルプを求められ、確認すると、
gitホスティングサービス上では不思議な事態が起こっていました。

f:id:heleeen:20161230202919p:plain

こんな感じでmasterがちぎれていました

何をした結果なのか詳細は確認してないのですが、
なんらかの作業をした結果detached状態になり、
-fをつけてmasterプッシュしたのかな?という気がしています

目標は、masterを可能な限り復元することです

リポジトリの運用ルールに100%準拠していることを前提に、
そのリポジトリ利用者に、最後にmasterへマージしたdevelopを教えていただき
そこをmasterとして修正しました

手順
  1. (ローカルが死んでしまったため)リポジトリを新規クローン
  2. 最後にmasterへマージしたdevelopをcheckout
  3. detached状態のmasterを削除(ウワーッ)
  4. そのまま最後にmasterへマージしたdevelopからmasterを生やします
  5. 最後にmasterへマージしたdevelopと作成したmasterの最新コミットが一致することを一応確認
  6. -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が本物のコミットだったよねー
あーやっちゃった

運用ルールに準拠していることを前提に修正したのですが
ルールがあるってありがたいね!準拠してるって信じてる!!