はじめに
つい先日、masterブランチを開発ブランチにマージした際にやらかしてしまい。
開発ブランチ上のコミットが消えて(見えなくなって)、かなり焦ることがありました。
その際、.git配下のファイルから復帰が出来たので、その時のメモになります。
やらかしたこと
なにをしていたか
- 開発ブランチで開発中だった
- hotfix 対応があった
- hotfix 対応部分を開発ブランチに取込もうと、マージした
- 冗長なコミットに気付く
- ログを綺麗にしようと思いたち、リビジョンを戻した
git reset --hard <revision>
- 冗長なコミットをまとめて修正
- まとめて push
git push -f origin <開発ブランチ>
正確に把握していない(ボーっと作業していた)ので、
なにか間違いがありそうですが、たぶんこんな感じです。
・・・ここ3日で作ったコミットが、ない!?
リモートリポジトリを眺めていて異変に気付きました。
「あれ?ブランチ間で差分が出てない。」
「開発ブランチにしかないコミットがあるはずなのに?」
「・・・ここ3日で作ったコミットが、ない!?」
久しぶりに心臓が冷える思いがしました。。
GWに出勤して作ったのに・・。
何をして復旧したか?
git を信じて revision ログを探す
心臓は冷えましたが、「git なら残っているはず」と信じて、
.git 以下のファイルを見てみました。
以下、ほぼ名前からの推測と勘で、目的のファイルに一発で
辿り着きました。
直感的な名付けとフォルダ分けがされていて本当~~~~に助かりました。
さすが git様。
ありがとう、いいツールです。
以下、見て行った順に画像を貼ります。
.git
.git/logs
.git/logs/refs
.git/logs/refs/heads
featureフォルダが見えました。かなり期待が持てますね。。どきどき
※ ちなみに、feautreってなんでしょうね。
.git/logs/refs/heads/feature
画像は割愛していますが、ありました。feature 毎のファイルが。
さっそく、やらかしたfeatureと同名のファイルを見てみます・・!
repository
きました・・。
コミット時のリビジョンが残っています・・・。
これで、git reset すれば・・!どきどき
git reset --hard <revision>
復旧しました!
私の場合は、この作業でやらかす前に戻ることができました!
(3日分の作業が無駄にならずに済みました・・!)
教訓
フォルダ分け、名付けは本当に大事。
こんなミスを他の人が犯すのかは疑問ですが(苦笑)
どなたかの参考になれば幸いです。