4

В мерзавца я знаком с тем, как оформить отдельные файлы, которые были удалены с помощью git checkout -- [<paths>...] синтаксиса (который рекомендуется, когда вы делаете git status.Git: Как вы проверяете все удаленные файлы?

Чтобы получить все файлы, которые вы могли бы создать список и дать список, как аргумент в команду выше.

Однако, когда вы просто хотите, чтобы все файлы, которые были удалены (т.е. ет -rf в ваших Д, а затем вы хотите, чтобы восстановить все файлы), формирующие этот список некрасиво.

Как проверить все удаленные файлы?

+0

я добавил, что я обычно делаю, чтобы очистить untrack файлы в моем ответе ниже. Это очень удобно в большинстве случаев после 'git reset --hard' :) – Gayan

ответ

0

Команда git checkout --force, похоже, делает трюк. На странице man для опции --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. 
6

Генерация списка не что трудно:

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 -- ..)

+0

Чтобы найти удаленные файлы, используйте filter = D, not filter = R – Oli

+0

@ Oli: oops, yes, yikes! – torek

1

Я обычно делаю

1. $ git checkout . 

к проверке изменений с последующим

2. $ git clean -fd 

Это приведет к удалению ненужных файлов. f для файлов и d для каталогов.

Вы могли бы сделать также сделать всухую перед 2-й стадии, делая

git clean -fdn 

Это список вниз файлы и каталоги, которые будут удалены.

см подробнее на undoing changes

0

, когда вы просто хотите, чтобы все файлы, которые были удалены (т.е.ет -rf в ваших Д, а затем вы хотите, чтобы восстановить все файлы)

Вы хотите

git checkout-index -a 
0

Если изменения для Удалять файлы не совершало, вы можете использовать git checkout -- ..

Если изменения для файлов удалены, вы можете использовать git reset --hard HEAD~.

0

я был в состоянии сделать это с:

for f in $(git diff --no-renames --name-only --diff-filter=D);do git checkout -- $f ;done 
Смежные вопросы