1

ここでのシナリオでは、まずマスターツリーに2つのフォルダーがあります

├── foo1
│   └── index.php
└── foo2
    └── index.php

次に、ブランチb1を作成し、さらに2つのフォルダーに追加します。

├── foo1
│   └── index.php
├── foo2
│   └── index.php
├── foo3
│   └── index.php
└── foo4
    └── index.php

その後、コマンドを実行し、コマンドなしgit add .で強制的にマスターに切り替えます。現在のツリーはfoo3およびfoo4フォルダーがなくなりましたが、ブランチb1のままです。git co -f mastercommit

├── foo1
│   └── index.php
└── foo2
    └── index.php

私の質問は、ブランチb1からフォルダ3と4を復元する方法です。試しgit co b1ましたが、フォルダ3,4がまだ消えています。

4

2 に答える 2

1

'git fsck'を使用して、ぶら下がっているブロブを見つけます。次に例を示します。

$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
dangling blob 54578ea3b3fb8d790bc5e19e36b52e601ec5433a
dangling blob f719efd430d52bcfc8566a43b2eb655688d38871

あなたはそれらを直接リストすることができます:

$ ls .git/lost-found/other/
54578ea3b3fb8d790bc5e19e36b52e601ec5433a
f719efd430d52bcfc8566a43b2eb655688d38871

その後、それらを1つずつ回復します。

$ cat .git/lost-found/other/54578ea3b3fb8d790bc5e19e36b52e601ec5433a 
<contents of file>
$ mv .git/lost-found/other/54578ea3b3fb8d790bc5e19e36b52e601ec5433a <my-file-one>

ディレクトリ構造を再構築する必要があると思います。

于 2013-02-24T15:22:26.303 に答える
1

GoZoner が言うようにそれらを元に戻すことはできますがcheckout -f、そのチェックアウトの邪魔になるものはすべて吹き飛ばすように git に指示したことになります。 .

特に、追跡ファイルとしてgit addマークした場合。foo{3,4}/index.phpチェックアウト中に、ファイルが現在のインデックスで追跡され、新しいインデックスで追跡されていない場合、そのファイルは追跡された状態で存在し、現在は存在しないため、新しい追跡された状態に一致するように切り替えることは、必然的にワークツリーからファイルを削除することを意味します。

通常、git は追跡されたファイルのコミットされていないコンテンツの削除を拒否しますが、多かれ少なかれ説明メッセージが表示されますが、--force. そうしないでください。

于 2013-02-24T15:36:07.670 に答える