【问题标题】:How can I check out a particular version of one file in Git?如何在 Git 中签出一个文件的特定版本?
【发布时间】:2009-07-23 18:35:51
【问题描述】:

如何在 git 中查看某个文件的特定版本?

找到this mail on the mailing list,上面写着:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

但我不明白如何找出'HEAD~43',如果我做git log aFile,我如何找出我应该使用哪个'HEAD~43'?

为什么我需要为该文件运行git reset?它有什么作用?

【问题讨论】:

  • "git reset " 与 "git checkout " 完全一样。
  • 如果您的问题是关于 HEAD~43 语法(记录在 git-rev-parse 中),请询问此问题,而不是您知道答案的无关问题。 “HEAD~45 是什么意思,以及如何找到特定版本的文件”
  • 根据lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/…lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-reset.html,“git reset ”与“git checkout ”不完全相同:“git reset " 从 恢复索引中的 而不触及工作树中的 ,但是 "git checkout " 从 更新 的索引然后在工作树中更新
  • 如果下面的任何答案回答了您的问题,Stack Overflow 的工作方式,您可以通过单击旁边的复选标记“接受”该答案; details here。但前提是您的问题得到了回答;如果没有,请考虑在问题和/或 cmets 中添加更多详细信息,说明哪些内容尚不清楚(尚不清楚)。

标签: git


【解决方案1】:

您知道文件属于哪个提交(即:特定修订版)吗?然后做:

git checkout <commit> <file>

另一个命令:

git checkout HEAD~N <file>

当你想从一个范围内获取文件的一个版本时(我这样做是为了怀旧)。

【讨论】:

    【解决方案2】:

    HEAD~43 只是树状结构,因此您可以使用散列或标签。您必须使用 -- 将 treeish 与文件名分开,否则将被视为文件名。例如。

    git checkout v0.45 -- filename
    git checkout HEAD^ -- filename
    git checkout 16bb1a4eeaa9 -- filename
    

    【讨论】:

      【解决方案3】:

      HEAD~43 指的是文件的提交(版本)。取而代之的是,您可以使用通过对文件执行 git log 获得的提交哈希。如果您只想要该文件,则无需在其上运行git reset;仅当您要将文件转发到当前 HEAD 时才需要这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 2020-07-06
        • 2020-02-06
        • 1970-01-01
        相关资源
        最近更新 更多