仕組み - Gitでは、コミットする前に元に戻されたステージファイルをどのように回復できますか?



git tag 詳細 (2)

私はGit Towerを使ってリポジトリに変更を取り込もうとしていました。 私がそうしたとき、紛争があり、私は間違って舞台にぶつかりました(紛争を解決してコミットしたかったように)。 私がそうしたとき、紛争は解決されたと自覚した。

手動で変更を解決して「Merge Abort」とヒットしたかったのですが、これを実行したときにすべての変更がロールバックされました! それらを取り戻す方法はありますか?

https://src-bin.com


Answer #1

gitにステージングされたものがあれば、おそらくそれを得ることができるはずです。 (作業コピーを変更したばかりの場合は、復元することはできません)。

まず第一に、 git gc実行しないでください。 先に進む前にリポジトリと作業コピーをバックアップしてください。 ( .gitディレクトリを必ずバックアップしてください)また、これが起こった端末を閉じたりリブートしたりしないでください。すべて失敗した場合は、履歴/メモリ内のものを見つける機会があります。

とにかく、まず試してみてください:

git fsck --lost-found

それはのようなものを印刷します

Checking object directories: 100% (256/256), done.
Checking objects: 100% (30165/30165), done.
dangling blob 8f72c7d79f964b8279da93ca8c05bd685e892756
dangling commit 4993502a6394491190d3f4d6fb3d1e14019c2e9b

ステージングされたファイルを失ってコミットしなかったので、 dangling blobエントリをdangling blobことに興味があります。

git show <sha>をそれぞれ実行します - それらのいくつかはあなたのファイルでなければなりません。


Answer #2

アレクサンダーの答えをもっと簡単な方法で拡大するには:はい、あなたが変更を上演していれば、ファイルを元に戻すことができます。 git addを実行git add 、ファイルは実際にGitのオブジェクトデータベースに追加されます。 あなたがした瞬間、gitはそのファイルをインデックスに入れます:

% git add bar.txt
% git ls-files --stage
100644 ce013625030ba8dba906f756967f9e9ca394464a 0   bar.txt
100644 6af0abcdfc7822d5f87315af1bb3367484ee3c0c 0   foo.txt

bar.txtのエントリには、ファイルのオブジェクトIDが含まれています。 Gitは実際にオブジェクトデータベースにファイルを追加しました。 この場合、Gitはそれを疎なオブジェクトとしてリポジトリに追加しました:

% ls -Flas .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
4 -r--r--r--  1 ethomson  staff  21 14 Jun 23:58 .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a

これらのファイルは最終的にガベージコレクションされます(実際にgit gc明示的に実行しないでください)。 ありがたいことに、デフォルトでは、これは日で、数日で起こります。 これらのファイルがガベージコレクトされるまで、それらを回復することができます。

これを行う最も簡単な方法はgit-recoverプログラムをインタラクティブモードでダウンロードしてインストールすることです。

% git recover -i
Recoverable orphaned git blobs:

61c2562a7b851b69596f0bcad1d8f54c400be977  (Thu 15 Jun 2017 12:20:22 CEST)
> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
> tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
> veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
> commodo consequat. Duis aute irure dolor in reprehenderit in voluptate

Recover this file? [y,n,v,f,q,?]: 

git-recoverは、コミットされていない (またはインデックス内の)オブジェクトデータベース内のファイルを探します。 git-recoverについての詳細は、ブログのポストで発表しています。





git-tower