【问题标题】:Can `git checkout HEAD^ -- <file>` revert a file in a commit?`git checkout HEAD^ -- <file>` 可以在提交中恢复文件吗?
【发布时间】:2019-06-18 09:37:12
【问题描述】:

我正在考虑这个问题:Revert changes to a file in a commit

我可以先运行git checkout HEAD^ -- &lt;file&gt;,然后运行git add &lt;file&gt;git commit 来恢复提交中对文件的更改吗?

谢谢。

【问题讨论】:

    标签: git


    【解决方案1】:

    是,但请注意git checkout 首先将文件从&lt;tree-ish&gt; 参数写入索引,然后将文件的更新索引副本复制到工作树:

    git checkout HEAD^ -- <file>
    

    现在&lt;file&gt; 在索引和工作树中是相同的,并且与HEAD^ 找到的提交中的版本匹配。

    因此:

    然后git add &lt;file&gt;

    是不必要的,因为这只是将工作树版本复制到索引中。1 你可以只做提交。


    1工作树版本已经与索引匹配,Git 跳过复制。 即使您修改了一组干净和/或涂抹过滤器,或更改了行尾设置,也是如此。在这种特殊情况下,您希望强制 Git 重新清理文件从工作树到索引的方式,你必须要么欺骗 Git 认为工作树文件已更改:

    touch <file>
    

    或使用git add--renormalize 选项。

    【讨论】:

      【解决方案2】:

      是的,你可以这样做:

      git checkout HEAD -- <path>
      git reset <path>
      git add <path>
      git commit 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        • 2015-08-19
        • 2016-04-17
        相关资源
        最近更新 更多