Usunięcie usuniętego pliku w git

Zazwyczaj, aby odrzucić zmiany w pliku, wykonasz:

git checkout -- <file>

Co zrobić, jeśli zmiana, którą chcę odrzucić, to usunięcie pliku? Powyższy wiersz dałby błąd:

error: pathspec '<file>' did not match any file(s) known to git.

Jakie polecenie przywróci ten pojedynczy plik bez cofania innych zmian?

Punkt bonusowy: ponadto, co jeśli zmiana, którą chcę odrzucić, to dodanie pliku? Chciałbym wiedzieć, jak usunąć tę zmianę.

Author: yochannah, 2012-03-07

4 answers

Zakładając, że chcesz cofnąć efekty ' git rm 'lub ' rm', po których następuje 'git add-A' lub coś podobnego:

# this restores the file status in the index
git reset -- <file>
# then check out a copy from the index
git checkout -- <file>

Aby cofnąć 'git add', wystarczy pierwsza linijka powyżej, zakładając, że jeszcze się nie zobowiązałeś.

 546
Author: twalberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-06 20:46:25

Na oba pytania udzielono odpowiedzi w git status.

Aby odinstalować Dodawanie nowego pliku użyj git rm --cached filename.ext

# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test

Aby usunąć plik użyj git reset HEAD filename.ext

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    test

Z drugiej strony, git checkout -- nigdy nie odtwarza się, po prostu odrzuca nie-ustawione zmiany.

 42
Author: seppo0010,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 09:59:40

Odpowiedzi na twoje dwa pytania są ze sobą powiązane. Zacznę od drugiego:

Po ustawieniu pliku (często za pomocą git add, choć niektóre inne polecenia domyślnie ustawiają zmiany, jak git rm), możesz wycofać tę zmianę za pomocą git reset -- <file>.

W Twoim przypadku musisz użyć git rm do usunięcia pliku, co jest równoznaczne z usunięciem go za pomocą rm, a następnie przesunięciem tej zmiany. Jeśli najpierw usuniesz go za pomocą git reset -- <file>, możesz go odzyskać za pomocą git checkout -- <file>.

 9
Author: Ben Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-06 20:38:25

Jeśli plik został zainscenizowany i zatwierdzony, to następujący plik zostanie zresetowany:

git reset COMMIT_HASH file_path
git checkout COMMIT_HASH file_path
git add file_path

To zadziała w przypadku usunięcia, które miało miejsce kilka commitów wcześniej.

 2
Author: michaeldever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 14:19:06