Gitでは、git checkout -- [<paths>...]
構文を使用して削除された個々のファイルをチェックアウトする方法に精通しています(これは、git status
を実行するときに推奨されます。
すべてのファイルを取得するには、リストを作成し、上記のコマンドの引数としてリストを指定します。
ただし、削除されたすべてのファイルが必要な場合(つまり、cwd内のrm -rfで、すべてのファイルを復元したい場合)、そのリストの生成はエレガントではありません。
削除されたすべてのファイルをどのようにチェックアウトしますか?
リストの生成はthat hardではありません:
git diff --no-renames --name-only --diff-filter=D
git checkout
に適したものにするには、-z
とxargs -0
を使用します。
git diff --no-renames --name-only --diff-filter=D -z |
xargs -0 git checkout --
git checkout -f -- .
の使用は、上記とはまったく異なることに注意してください。git checkout -f -- .
は、変更されているがまだインデックスに追加されていないファイルを上書きしますが、上記はのみ抽出します。インデックス、まだインデックスであるが、ワークツリーに存在しないファイル。
(そのような変更されたファイルがない場合、git checkout -f -- .
は機能しますが、git checkout -- .
も機能します。)
削除されたすべてのファイルが必要な場合(つまり、cwdにrm -rfがあり、すべてのファイルを復元したい場合)
あなたが欲しい
git checkout-index -a
私は通常します
1. $ git checkout .
変更をチェックアウトしてから
2. $ git clean -fd
これにより、追跡されていないファイルが削除されます。ファイルの場合はf
、ディレクトリの場合はd
。
2番目のステップの前にドライランを実行することもできます
git clean -fdn
これにより、削除するファイルとディレクトリが一覧表示されます。
詳細については、 変更の取り消し を参照してください。
ファイル削除の変更がコミットされていない場合は、git checkout -- .
を使用できます。
削除ファイルの変更がコミットされている場合は、git reset --hard HEAD~
を使用できます。
コマンドgit checkout --force
がうまくいくようです。 --force
オプションのマニュアルページには、「[-forceオプション]はローカルの変更を破棄するために使用されます」と記載されています。
git-checkout
のマニュアルページから:
-f, --force
When switching branches, proceed even if the index or the
working tree differs from HEAD. This is used to throw away
local changes.
When checking out paths from the index, do not fail upon
unmerged entries; instead, unmerged entries are ignored.
私はそれを行うことができました:
for f in $(git diff --no-renames --name-only --diff-filter=D);do git checkout -- $f ;done