我的提交涉及对多个文件的更改。现在我想删除我对其中一个文件所做的更改。更确切地说,我希望此文件与远程主服务器上的当前版本相同。我怎样才能做到这一点?
我想那个
git checkout -- <filename>
可能会做我需要的但我不确定。
我也看过这种语法:
git checkout <commit> <filename>
我猜最后一个命令会删除特定提交引入的文件的更改,但第一个命令会执行什么操作?它会删除git pull之后执行的所有提交所引入的更改吗?
答案 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