git восстановить удаленный файл, где фиксация не была сделана после удаления

Я удалил некоторые файлы.

я еще не совершал.

Я хочу сбросить рабочее пространство для восстановления файлов.

Я git checkout ..

но удаленные файлы по-прежнему отсутствует.

и git status показывает:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

почему git checkout . сбросить рабочее пространство до HEAD?

20 ответов


выход говорит вам, что нужно делать. git reset HEAD cc.properties etc.

это будет unstage операции rm. После этого запустите git status снова скажет вам, что вам нужно сделать git checkout -- cc.properties чтобы вернуть файл.

обновление: У меня есть это в моем файле конфигурации

$ git config alias.unstage
reset HEAD

который я обычно использую для unstage вещей.


вы устроили удаление, поэтому вам нужно сделать:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout . только проверяет из индекса, где удаление уже было выполнено.


просто делать git checkout path/to/file-I-want-to-bring-back.txt


восстановить все unstaged удаление сразу, автоматически, без указания каждого один путь:

git ls-files -d | xargs git checkout --

восстановить все поставил удаление сразу, автоматически, без указания каждого один путь:

git status | grep 'deleted:' | awk '{print }' | xargs git checkout --

Так как вы делаете git checkout ., похоже, вы пытаетесь восстановить свою ветку до последнего состояния фиксации.

вы можете достичь этого с помощью git reset HEAD --hard

предупреждение

Это может удалить все ваши последние изменения и отменить ваши изменения, например, вы можете потерять работу. Это мая быть то, что вы хотите, но проверить документы чтобы убедиться в этом.


Если вы используете

git rm filename

чтобы удалить файл, то

git checkout path/to/filename

не работает, так что в этом случае

git checkout HEAD^ path/to/filename

должно работать


вот команда, которая помогла мне на моем mac. Я попробовал несколько других решений, но они не работали для меня.

версия Git на OSX Mavericks

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

команда

git checkout HEAD -- path/to/file/file.cc

git checkout HEAD -- client/src/pp_web/index.cljs

Если вы хотите восстановить все файлы сразу

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

эта команда сбросит голову и unstage все изменения:

$ git reset HEAD . 

затем выполните это, чтобы восстановить все файлы:

$ git checkout .

затем, делая статус git, вы получите:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

вы можете посмотреть этой

это касается случаев, когда вы использовали

git checkout -- .

прежде чем что-то совершить.

вы также можете избавиться от созданных файлов, которые еще не были созданы. А ты их не хочешь. С :

git reset -- .

нашел это сообщение, ища ответы о том, как удалить файл, который был удален в моем рабочем каталоге после слияния из другой ветви. После слияния коммит еще не был сделан. Поскольку это было слияние в процессе, я не мог просто добавить его обратно, используя:

$ git reset <commitid#-where-file.cpp-existed> file.cpp

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

$ git checkout -- file.cpp

использовать git ls-files для проверки удаленных(-d) или измененных (- m) файлов.

git checkout $(git ls-files -d)

посмотреть как я могу восстановить только измененные файлы на git checkout?


Если вы не совершили никаких изменений, все, что вам нужно сделать, это спрятать эти изменения, и вы вернетесь к последней рабочей фиксации.

git stash
git stash clear
git clean 

Если вы ищете удаленный каталог.

 git checkout ./pathToDir/*

Если вы установили ToroiseGIT, просто выберите " Revert..."пункт меню всплывающего меню родительской папки.


для меня то, что работал git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(выполняется в ветке, в которую мы хотим, чтобы файл вошел)

после выполнения этой команды восстановленный файл будет существовать в исходном расположении (которое необходимо будет вернуть)


Я искал ответ на это и обнаружил, что простой

git checkout ./*

будет делать.


У меня была та же проблема, однако ни одно из решений работал для меня. Я решил было:
- создайте пустой файл с тем же именем
- сравните этот файл с его историей
- скопируйте историю в пустой файл.


Я также удалил все мои файлы и восстановить с помощью следующей команды:

$ git config alias.unstage
$ git checkout HEAD^ *

1.Найдите ту конкретную фиксацию, к которой вы хотите вернуться, используя:

   git log
This command will give you a list of commits done by you .

2.Вернитесь к этой фиксации, используя:

    git revert <commit id> 

теперь у вас локальная ветвь будет иметь все файлы в частности