Як повернути 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 '' або `` шлях до GIT checkout HEAD ''
Вільям Перселл,

@ Вільям: Дякую! Зараз набагато більше сенсу.
Daenyth,

Не працює для нових файлів, тому насправді не перевіряє індексацію, оскільки для цього потрібен об’єкт. Як отримати замовлення з постановки? редагувати Це справді працювало з --подібним статусом.
Руді

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
Вам краще сказати нам різницю, замість того, щоб розміщувати те, що цитувалося раніше.
Бахсау,

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 змінено, але знову знято з інсталяції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.