如何将 git 文件恢复到其暂存区域版本?

假设我有一个名为 a.txt的文件。我将其添加到集结区域,然后对其进行修改。我怎么才能让它恢复到原来的样子呢?

26442 次浏览
  • Prior to Git 2.23: git checkout a.txt
  • Starting from Git 2.23: git restore a.txt

Git tells you this if you type git status.

Prior to 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
#

Starting from 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

git checkout -- a.txt

The other answer on this page doesn't have the --, and resulted in some confusion.

This is what Git tells you when you type 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
#

Unstaging a Staged File

The next two sections demonstrate how to work with your staging area and working directory changes. The nice part is that the command you use to determine the state of those two areas also reminds you how to undo changes to them. For example, let’s say you’ve changed two files and want to commit them as two separate changes, but you accidentally type git add * and stage them both. How can you unstage one of the two? The git status command reminds you:

$ 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

Right below the “Changes to be committed” text, it says use git reset HEAD ... to unstage. So, let’s use that advice to unstage the CONTRIBUTING.md file:

$ 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

The command is a bit strange, but it works. The CONTRIBUTING.md file is modified but once again unstaged.

git restore --staged filename

This is the command to unstage a file after adding it.