如何将提交的更改丢弃到一个文件?

时间:2018-02-02 08:47:08

标签: git commit

我的提交涉及对多个文件的更改。现在我想删除我对其中一个文件所做的更改。更确切地说,我希望此文件与远程主服务器上的当前版本相同。我怎样才能做到这一点?

我想那个

git checkout -- <filename>

可能会做我需要的但我不确定。

我也看过这种语法:

git checkout <commit> <filename>

我猜最后一个命令会删除特定提交引入的文件的更改,但第一个命令会执行什么操作?它会删除git pull之后执行的所有提交所引入的更改吗?

1 个答案:

答案 0 :(得分:1)

Checkout 在该提交中签出该文件。

当你执行git checkout -- filename时,--只是说“选项结束”,这意味着该标记之后的任何内容都是一个参数,而不是一个选项。

在这种情况下,如果未指定提交,则使用ref HEAD,因此将获取HEAD中的文件并将其应用于当前提交的文件(这意味着没有任何实际发生,只有具有的更改)没有被提交消失;如果目录是干净的,根本没有任何事情发生。)

如果指定了提交ID,则该提交的文件将应用于当前文件。

示例
假设您从5天前开始提交ID为257d2c7的提交 在这个提交中你添加了一首诗,你正在写一首诗(谁说git只对源代码有帮助?)然后你决定不那么好并删除它。
然后你做了几个提交。 但是现在你想要回到那个特定的经文,你是怎么做到的?

如下:

$ git stash // save existing changes and clean working directory
$ git checkout 257d2c7 my-poem.txt // check out your poem from 5 days ago
$ git stash pop // reapply existing changes and resolve conflicts
$ ... // continue working