リポジトリ@ githubがあります。家で仕事をして、GitHubにプッシュしました。ファイルとディレクトリの削除が必要でした。これで、ファイルとディレクトリを削除する前にコードのコピーを持っていた私の作業ボックスにいます。
以下を発行しました。
git remote update
git checkout HEAD
git pull Origin HEAD
必要なファイルはすべて削除されましたが、ファイルがあったディレクトリは削除されませんでした。
2つの質問:
Gitはディレクトリを追跡しないため、マージやその他の変更の結果として空になったディレクトリは削除されません。ただし、git clean -fd
追跡されていないディレクトリ(-fd
フラグは、f orce追跡されていないファイルの削除とd irectoriesを意味します。
作業ツリーを変更するほとんどの操作(プル、マージ、チェックアウトなど)の一部として、gitはその操作によって空になったディレクトリをすべて削除します(つまり、gitは最後のファイルを削除しました)。
gitは完全に空ではないディレクトリを削除しません。そのため、ファイルを非表示または無視した場合、gitがそのディレクトリから最後のtrackedファイルを削除するからといって、必ずしもgitになるわけではありませんそのディレクトリを削除できます。 gitはこれをエラー状態と見なさないため、文句を言うことはありません。
Gitはディレクトリ、ファイル(およびそのパス)を追跡しません。 Gitは、それらのパスがまだ存在しない場合はすべてのディレクトリを作成しますが(クール!)、ただし、notパスは移動または削除されます(クールではありません☹...しかし、理由があります)。
Solution(いったんプル/早送り/マージしたら):
git stash --include-untracked
git clean -fd
git stash pop
stash
の前にclean
を付けないと、すべての未追跡ファイルが(不可逆的に)失われます。
注:これにより、無視されたファイルもすべて消去されるため、プロジェクトメタデータを再作成するために、ビルドスクリプトの一部を再度実行する必要がある場合があります(例:./gradlew Eclipse
)。これにより、空で、gitファイルのパスの一部ではないディレクトリも削除されます。