如何丢弃对一个文件的提交更改?
How to discard committed changes to just one file?
我有一个提交涉及对多个文件的更改。现在我想删除我对其中一个文件所做的更改。更准确地说,我希望这个文件与远程主机上的当前版本相同。我怎样才能做到这一点?
我猜
git checkout -- <filename>
可能会满足我的需要,但我不确定。
我也见过这种语法:
git checkout <commit> <filename>
我想最后一个命令删除了特定提交引入的文件更改,但是第一个命令做了什么?它是否删除了 git pull 之后执行的所有提交所引入的更改?
签出 签出 该提交中的那个文件。
当您执行 git checkout -- filename
时,--
只是表示 "end of options",这意味着该标记之后的任何内容都是参数,而不是选项。
在这种情况下,如果未指定提交,则使用 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
我有一个提交涉及对多个文件的更改。现在我想删除我对其中一个文件所做的更改。更准确地说,我希望这个文件与远程主机上的当前版本相同。我怎样才能做到这一点?
我猜
git checkout -- <filename>
可能会满足我的需要,但我不确定。
我也见过这种语法:
git checkout <commit> <filename>
我想最后一个命令删除了特定提交引入的文件更改,但是第一个命令做了什么?它是否删除了 git pull 之后执行的所有提交所引入的更改?
签出 签出 该提交中的那个文件。
当您执行 git checkout -- filename
时,--
只是表示 "end of options",这意味着该标记之后的任何内容都是参数,而不是选项。
在这种情况下,如果未指定提交,则使用 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