# Git 取消对文件的修改

**URL:** <https://www.isharkfly.com/t/git/10816>\
**Category:** 软件技术\
**Created:** [March 29, 2015, 2:12pm UTC](https://www.isharkfly.com/t/git/10816 "2015-03-29T14:12:50Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [March 29, 2015, 2:12pm UTC](https://www.isharkfly.com/t/git/10816/1 "2015-03-29T14:12:50Z")

</div>

如果觉得刚才对 benchmarks.rb 的修改完全没有必要，该如何取消修改，回到之前的状态（也就是修改之前的版本）呢？git status 同样提示了具体的撤消方法，接着上面的例子，现在未暂存区域看起来像这样：

[code]Changes not staged for commit:  
(use “git add …” to update what will be committed)  
(use “git checkout – …” to discard changes in working directory)

```
    modified: benchmarks.rb[/code]

```

在第二个括号中，我们看到了抛弃文件修改的命令（至少在 Git 1.6.1 以及更高版本中会这样提示，如果你还在用老版本，我们强烈建议你升级，以获取最佳的用户体验），让我们试试看：

[code] git checkout -- benchmarks.rb git status  
On branch master  
Changes to be committed:  
(use “git reset HEAD …” to unstage)

```
    modified: README.txt

```

[/code]  
可以看到，该文件已经恢复到修改前的版本。你可能已经意识到了，这条命令有些危险，所有对文件的修改都没有了，因为我们刚刚把之前版本的文件复制过来重写了此文件。

所以在用这条命令前，请务必确定真的不再需要保留刚才的修改。如果只是想回退版本，同时保留刚才的修改以便将来继续工作，可以用下章介绍的 stashing 和分支来处理，应该会更好些。

记住，任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交，或者用 --amend 重新改写的提交，都可以被恢复（关于数据恢复的内容见第九章）。

所以，你可能失去的数据，仅限于没有提交过的，对 Git 来说它们就像从未存在过一样。

REF：[http://cwiki.ossez.com/pages/viewpage.action?pageId=7045478](http://cwiki.ossez.com/pages/viewpage.action?pageId=7045478)
