質問: ### 前提・実現したいこと SourceTreeで管理しているローカルリポジトリのブランチ(History)がすべて消えていました。 故意に削除したわけではなく、ソフトを立ち上げたらブランチが消えていて管理していたファイルがすべてステージされた状態でした。 ブランチを復元する方法はありますか? ### 試したこと ブランチが消えた原因としてPCがブルースクリーンで落ちたことが考えられました。 最新の復元ポイントに復元しましたがSourceTreeの設定などは戻りませんでした。 リポジトリの再読み込みもしてみましたが、ブランチは消えたままでした。 ### 補足情報 Windows 10 pro 64bit SourceTree Ver3.3.8 内蔵Gitバージョン 2.24.1 リポジトリの管理はローカルのみです。 gitフォルダの中には管理していたログ(ブランチ)と思われるファイルなどが残っているようです。 .git\logs\refs\heads\master .git\refs\heads\master など 現状、『新規リポジトリ作成をした状態』とほぼ同じですが、退避させていたスタッシュ情報だけは残っています。 何もコミットされていない状態になっているのでmasterブランチも存在しません。 他にも管理しているローカルリポジトリはありますが、ブランチが消えてしまったのは1件のみです。 CLIは苦手なので、コマンドプロンプトを使った操作方法であれば、わかりやすく解説(またはコピペで済む方法で)していただけると助かります。 ### 解決方法 アドバイスをいただき無事に解決しましたので、解決手順をまとめました。 対象のgitフォルダは`C:\Users\[ProjectFolder]\.git`と仮定 1. 念のためにリポジトリをどこかにバックアップ C:\Users\ └[ProjectFolder] │└.git(バックアップする) 2. リポジトリをProjectFolderの同層へclone コマンドプロンプトを起動 `Windowsキー + R` `cmdと入力` カレントディレクトリを移動 `cd C:\Users\[ProjectFolder]` リポジトリをクローン `git clone C:\Users\[ProjectFolder] newProjectFolder` C:\Users\ ├[ProjectFolder] │└.git(バックアップした) ├newProjectFolder(新しく作った) │└.git(cloneした) 3. cloneした.gitフォルダをC:\Users\[ProjectFolder]\.gitに上書き(コピペ) C:\Users\ ├[ProjectFolder] │└.git(cloneしたフォルダで上書き) 4. C:\Users\[ProjectFolder]内の.gitフォルダ以外のファイルをどこかに退避 5. SourceTreeでブランチをダブルクリックすると履歴が復活 6. 退避したファイルを元に戻して上書き(コミットされていない差分が復活) 以上の手順で消えたブランチを復活させることができました。 ### 補足:日本語(マルチバイト)名のブランチが表示されない場合 1. `.git\logs\refs\heads`と`.git\refs\heads`にあるマルチバイトブランチファイル(以下、jpブランチ)をシングルバイトにリネーム 2. `.git\logs`のHEADファイルの中身のjpブランチをリネームしたシングルバイト名に置換 3. `.git\logs\refs\heads`のjpブランチファイルから最新のコミットID(一番下の行の左から2つ目のコードの塊)をコピー 4. `.git\refs\heads`のjpブランチファイルにコピーしたコミットIDを貼り付けて保存 5. SourceTreeでリポジトリを更新するとjpブランチが復活
回答: で解決できないでしょうか。 1. レポジトリをバックアップしておく 2. レポジトリを別のところへclone (ProjectFolderのひとつ上とかで) `git clone C:\Users\[ProjectFolder] newProjectFolder` 3. C:\Users\[ProjectFolder]\.git を削除して newProjectFolder\.git を C:\Users\[ProjectFolder] にコピー (エクスプローラで) 4. ブランチがoriginの下になっているのを作り直して、originは削除 5. 問題なかったらバックアップを削除