硬重置单个文件

如何放弃对单个文件的更改并用新的HEAD副本覆盖它?我想对单个文件执行git reset --hard

1098784 次浏览

要将my-file.txt的工作副本及其在Git索引中的状态重置为HEAD的工作副本:

git checkout HEAD -- my-file.txt

--表示"将此点之后的每个参数视为文件名"。更多细节在这个答案中。感谢VonC指出这一点。

重置头部:

要将单个文件硬重置为HEAD:

git checkout @ -- myfile.ext

请注意,@HEAD的缩写。旧版本的git可能不支持该缩写形式。

重置到索引:

要将单个文件硬重置为索引,假设索引非空,否则重置为HEAD:

git checkout -- myfile.ext

关键是要安全,只有您不希望从命令中省略#0或#1,除非您特别想要重置为索引

您可以使用以下命令重置单个文件

git checkout HEAD -- path_to_file/file_name

列出所有更改的文件以使用以下命令获取path_to_file/filename

git status

一个简单,容易,动手,让你摆脱困境的方法,特别是如果你对git不太舒服:

  1. 查看文件的日志

    git日志myFile.js

    提交1023057173029091u23f01w276931f7f42595f84f作者: kmiklas日期:2018年8月7日星期二09:29:34-0400

    JIRA-12345-使用新架构重构。

  2. 注意文件的哈希:

    1023057173029091 u 23 f 01 w 276931 f 7 f 42595 f 84 f

  3. 使用哈希显示文件。确保它是你想要的:

    git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js

  4. 将文件重定向到本地副本

    git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js>myFile.07aug2018.js

  5. 备份当前文件。

    CPmyFile.jsmyFile.bak.js

  6. 在您喜欢的文本编辑器中打开这两个文件。

    vimmyFile.js
    vimmyFile.07aug2018.js

  7. 将粘贴代码从myFile.07aug2018.js复制到myFile.js,然后保存。

  8. 提交并推送myFile.js

  9. 再次查看日志,并确认您的文件已正确就位。

  10. 告诉你的客户拉最新的,愉快地看着它与旧版本一起工作。

不是最性感的,也不是最以git为中心的解决方案,绝对是“手动”重置/恢复,但它有效。它只需要最少的git知识,并且不会干扰提交历史记录。

要恢复到上游/主do:

git checkout upstream/master -- myfile.txt

您可以使用以下命令:

git reset -- my-file.txt

这将在添加时更新my-file.txt的工作副本。

您可以使用以下命令:

git checkout filename

如果您有一个具有相同文件名的分支,则必须使用此命令:

git checkout -- filename

没有必要引用HEAD。

git checkout -- file.js就够了

git 2.23(2019年8月)起,您可以使用#0更多信息):

git restore pathTo/MyFile

上面将在当前分支的HEAD(最后一次提交)上恢复MyFile

如果您想从其他提交中获取更改,您可以回溯提交历史记录。下面的命令将获得MyFile前两个提交。您现在需要-s--source)选项,因为现在您在恢复源代码时使用master~2而不是master(默认值):

git restore -s master~2 pathTo/MyFile

您也可以从其他分支获取文件!

git restore -s my-feature-branch pathTo/MyFile