单个文件的硬重置

时间:2011-08-22 12:12:52

标签: git

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

在SVN中,我使用svn revert <filename>(如果需要,可以使用svn update <filename>),但在git中我应该使用git reset --hard。但是,此命令无法在单个文件上运行。

有没有办法在git中丢弃单个文件更改并用新的HEAD副本覆盖它?

9 个答案:

答案 0 :(得分:1441)

您可以使用以下命令:

git checkout HEAD -- my-file.txt

...将更新my-file.txt的工作副本及其在索引中的状态与HEAD的状态。

--基本上意味着:将此点之后的每个参数视为文件名this answer中的更多详细信息。感谢VonC指出这一点。

答案 1 :(得分:96)

重置为头:

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

git checkout @ -- myfile.ext

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

重置为索引:

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

git checkout -- myfile.ext

关键在于,为了安全起见,您不希望从命令中遗漏@HEAD,除非您特别指的是重置为索引

答案 2 :(得分:48)

Git 2.23 起(2019年8月),您可以使用restoremore info):

git restore pathTo/MyFile

以上内容将恢复当前分支上MyFile(最后的提交)上的HEAD

如果要从其他提交中获取更改,则可以倒退提交历史。下面的命令将在最后一次提交之前MyFile进行两次提交。现在,您需要使用-s--source)选项,因为现在还原源时使用master~2而不是master(默认):

git restore -s master~2 pathTo/MyFile

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

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

答案 3 :(得分:24)

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

git checkout upstream/master -- myfile.txt

答案 4 :(得分:3)

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

git checkout HEAD -- path_to_file/file_name

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

git status

答案 5 :(得分:3)

您可以使用以下命令:

git reset -- my-file.txt

添加后将更新my-file.txt的两个工作副本。

答案 6 :(得分:1)

不需要引用HEAD。

git checkout -- file.js足够

答案 7 :(得分:-1)

您可以使用以下命令:

git checkout filename

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

git checkout -- filename

答案 8 :(得分:-16)

一种简单,方便,动手的方法,特别是在您对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. 将n'粘贴代码从myFile.07aug2018.js复制到myFile.js,然后保存。

  8. 提交并推送myFile.js

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

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

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