Как вернуть файл git к его версии промежуточной области?

80

Допустим, у меня есть файл с именем a.txt. Я добавляю его в область подготовки, а затем изменяю. Как я мог вернуть его таким, каким он был при добавлении?

Гео
источник

Ответы:

77
  • До Git 2.23: git checkout a.txt
  • Начиная с Git 2.23: git restore a.txt

Git сообщит вам об этом, если вы введете git status.

До Git 2.23:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:   a
#

Начиная с Git 2.23:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   a

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   a
абикс
источник
3
@Daenyth Я проверил его перед публикацией, и вы можете видеть, что на выходе показаны различные способы сброса файлов в разных состояниях (поэтапный или неустановленный)
abyx
1
@Daenyth - вы думаете о 'git checkout branch-name path' или 'git checkout HEAD path'
Уильям Перселл
@ Уильям: Спасибо! Теперь это имеет гораздо больше смысла.
Daenyth
Не работает для новых файлов, поэтому на самом деле не выходит из стадии постановки, так как для этого требуется объект. Как оформить заказ с постановки? edit Это действительно работало с --подобным статусом говорит.
Руди
30

git checkout -- a.txt

Другой ответ на этой странице не имеет --и привел к некоторой путанице.

Вот что Git сообщает вам, когда вы набираете git status:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:   a
#
непрямоугольный
источник
4
Вам лучше было сообщить нам разницу, чем публиковать то, что цитировалось ранее.
Bachsau
2

Удаление подготовленного файла

В следующих двух разделах показано, как работать с изменениями промежуточной области и рабочего каталога. Приятно то, что команда, которую вы используете для определения состояния этих двух областей, также напоминает вам, как отменить изменения в них. Например, предположим, что вы изменили два файла и хотите зафиксировать их как два отдельных изменения, но вы случайно набираете git add * и обрабатываете их оба. Как можно отключить одну из двух? Команда git status напоминает вам:

$ git add *
$ git status

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

renamed:    README.md -> README
modified:   CONTRIBUTING.md

Прямо под текстом «Изменения, которые необходимо зафиксировать», говорится, что используйте git reset HEAD ... для отключения. Итак, давайте воспользуемся этим советом, чтобы отключить файл CONTRIBUTING.md:

$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M   CONTRIBUTING.md

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

renamed:    README.md -> README

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   CONTRIBUTING.md

Команда немного странная, но работает. Файл CONTRIBUTING.md изменен, но снова отключен.

Гириш Рати
источник