git reset HEAD撤消add暂存区文件和git checkout撤消文件修改

 2015年10月31日    251     声明


在开发过程中的任何一个阶段,都可能会有撤消某些操作需要。对已经执行git add命令添加至暂存区的文件,我可能会需要将其中某个文件移除暂存区。对修改过的文件,可能需要撤消修改,将其恢复成上次提交时样子。这些情况下,我都需要将操作撤消。使用Git进行撤消操作时应该注意,有些撤消操作是不可逆的,使用不当会造成数据的丢失。


1. 暂存区文件的撤消

git reset HEAD ... 

git reset HEAD命令可以取消文件暂存。

例如,现有file1file2两个文件,已经执行git add *将它们添加到了暂存区。现在只需要提交file1,所以婪将file2移出暂存区。执行命令如下:

git reset HEAD file2

执行完命令后,可以通过git status命令查看文件状态。git status除可以查看文件状态外,还有对文件操作的提示信息。在本例中提示如下:

$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)
Changes to be committed:
  (use "git reset HEAD ..." to unstage)  // 可以执行git reset HEAD 命令将文件移出暂存区

	modified:   demo/file1

Changes not staged for commit:
  (use "git add ..." to update what will be committed) // 可以执行git add 命令将文件添加到暂存区
  (use "git checkout -- ..." to discard changes in working directory) //可以执行git checkout命令撤消文件操作

	modified:   demo/xxx.txt


2. 撤消文件修改

git checkout -- ...

git checkout命令可以方便的撤消文件修改,将其还原成上次提交的状态。

例如,我们不再需要修改file2文件,执行如下命名撤消修改:

git checkout -- file2


注意:git checkout -- ...命令会导致对文件所做的所有修改都消失且不能恢复,在执行命令前应充分确认对文件的修改已不再需要。