硬重置单个文件

我的工作目录中目前有三个修改过的文件。但是,我希望其中之一可以重置为 HEAD 状态。

在 SVN 中,我将使用svn revert <filename> (如果需要,随后使用svn update <filename> ),但在 git 中,我应使用git reset --hard 。但是,此命令不能在单个文件上运行。

git 中有什么方法可以丢弃单个文件更改并用新的 HEAD 副本覆盖它?

答案

git checkout HEAD -- my-file.txt
git checkout @ -- myfile.ext
git checkout -- myfile.ext

要恢复为上游 / 母版,请执行以下操作:

git checkout upstream/master -- myfile.txt

git checkout HEAD -- path_to_file/file_name
git status

无需引用 HEAD。

git checkout -- file.js就足够了

您可以使用以下命令:

git reset -- my-file.txt

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

git checkout filename
git checkout -- filename

一种简单,轻松,动手的方法,可让您摆脱热水,特别是如果您对 git 不太满意时:

  1. 查看文件日志

    git log myFile.js

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

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

  2. 注意文件的哈希:

    1023057173029091u23f01w276931f7f42595f84f

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

    git show 1023057173029091u23f01w276931f7f42595f84f:./ myFile.js

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

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

  5. 备份当前文件。

    cp myFile.js myFile.bak.js

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

    vim myFile.js
    vim myFile.07aug2018.js

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

  8. 提交并推送 myFile.js

  9. 再次查看日志,并确认文件正确放置到位。

  10. 告诉您的客户拉出最新版本,愉快地看着它与旧版本一起使用。

不是最性感的解决方案,也不是大多数以 git 为中心的解决方案,绝对不是 “手动” 重置 / 还原,但是它可以工作。它只需要很少的 git 知识,并且不会干扰提交历史。