Git Tower を使用してリポジトリに変更を取り込もうとしていました。そうしたらコンフリクトが発生してしまい(コンフリクトを解消してからコミットしたかったので)誤って全ステージに突入してしまいました。私がそうしたとき、競合は解決済みとしてマークされました。
変更を手動で解決したかったので、「マージの中止」をクリックしましたが、これを実行すると、すべての変更がロールバックされました! それらを取り戻す方法はありますか?
git にステージングされたものがある場合は、おそらくそれを元に戻すことができるはずです。(作業コピーを変更しただけでは、元に戻すことはできません。)
まず、実行しないgit gc
でください。先に進む前に、リポジトリと作業コピーをバックアップしてください。(必ずディレクトリをバックアップしてください.git
。) また、これが発生した端末を閉じたり、再起動したりしないでください。すべてが失敗した場合は、履歴/メモリで何かを見つける可能性があります。
とにかく、最初に試すことは次のとおりです。
git fsck --lost-found
次のようなものが印刷されます
オブジェクト ディレクトリのチェック: 100% (256/256)、完了。 オブジェクトのチェック: 100% (30165/30165)、完了。 ぶら下がっているブロブ 8f72c7d79f964b8279da93ca8c05bd685e892756 ダングリングコミット 4993502a6394491190d3f4d6fb3d1e14019c2e9b
ステージングされたファイルを失い、コミットをしなかったので、dangling blob
エントリに興味があります。
それぞれに対して実行git show <sha>
します — それらのいくつかはあなたのファイルでなければなりません。
どのブロブを回復する必要があるかをより迅速に把握できるようにすることで、コマンドラインを使用した回復を簡素化できる非常に遅い回答(他の回答と比較してかなり?):
git fsck --full --no-reflogs --unreachable --lost-found | grep blob | cut -d\ -f3 | while read in; do printf "blob: $in\n"; git cat-file -p $in; printf "\n--------------------------------\n"; done > recover.txt
このコマンドは、復元できるすべての BLOB のハッシュとコンテンツを含むファイルを作成します。
そうすれば、このファイルを簡単に検索して、指定されたハッシュで必要なブロブを回復できます (コマンドを使用git cat-file -p 8f72c7d79f964b8279da93ca8c05bd685e892756 > myFile.txt
)
免責事項: 到達不能な BLOB が多数ある場合、このファイルは巨大になり、作成が遅くなる可能性があります。
GUI ツールの使用を好み、Windows を使用している場合は、ファイルの回復に役立つGitExtensionsを使用することもできます。