【问题标题】:Go to particular revision转到特定修订
【发布时间】:2011-11-24 05:52:51
【问题描述】:

我克隆了某个项目的 git 存储库。我可以将文件转到初始状态,当我查看文件时转到修订版 2、3、4 ......最新版本?我想大致了解一下这个项目是如何发展的。

【问题讨论】:

    标签: git revision revision-history


    【解决方案1】:

    在执行之前这个命令请记住,它会让你处于分离头部状态

    使用git checkout <sha1> 来检查特定的提交。

    其中<sha1> 是您可以通过git log 获得的提交唯一编号

    以下是您处于分离头状态后的一些选项:

    • 复制文件或对 git 文件夹外的文件夹进行所需的更改,检查分支是否需要它们git checkout <existingBranch> 并替换文件
    • 创建一个新的本地分支git checkout -b <new_branch_name> <sha1>

    【讨论】:

    • 你可以这样做git log -n1。但除非git checkout 失败,否则就是白费力气。
    • 你应该只需要使用足够的 sha1 来保证唯一性。也许你有一个不幸的巧合。 Git 没有“下一个”提交的概念; history 是一个 DAG,所有箭头都指向后面。您应该运行 git log --oneline 并将输出粘贴到文本文件中以供参考(它提供的缩写 sha1 总和保证是唯一的)。如果您的历史是线性的,另一种选择是计算从第一次提交到master 的提交次数,并使用git checkout master~543(如果有 543 次提交),然后使用git checkout master~542,等等。
    • 以及如何从“git checkout ”检出到当前提交?
    • @AlexanderSupertramp 检查分支。
    • git checkout -b <new_branch_name> <sha1> :检查提交到分支。
    【解决方案2】:

    要转到特定版本/提交,请运行以下命令。你可以从git log --oneline -n 10获得HASH-CODE

    git reset --hard HASH-CODE
    

    注意 - 重置到特定版本/提交后,如果您想恢复所有被丢弃的提交,您可以运行 git pull --rebase

    【讨论】:

    • 请注意,reset 不仅会检出图表中的特定点,还会移动您当前检出的分支
    • 同样使用reset,您的所有未决更改都将被丢弃。
    • --hard flag 将删除所述哈希之后的所有提交.... 可能想在此处添加那个小提示。我相信人们已经失去了历史,想知道为什么。
    • git pull --rebase 仅在您有远程仓库的情况下才有效并且它是最新的。
    【解决方案3】:

    您可以使用gitk 等工具获得项目历史的图形视图。运行:

    gitk --all
    

    如果你想签出一个特定的分支:

    git checkout <branch name>
    

    对于特定的提交,使用 SHA1 哈希而不是分支名称。 (请参阅 Git 社区手册 中的 Treeishes,这是一本不错的读物,可以查看导航树的其他选项。)

    git log 也有一整套选项来显示详细或摘要历史记录。

    我不知道在提交历史记录中向前 移动的简单方法。具有线性历史的项目可能并不那么普遍。像使用 SVN 或 CVS 那样进行“修订”的想法并不能很好地映射到 Git。

    【讨论】:

    • 请注意:git 不会通过为您提供项目的单一线性历史来欺骗您。除非项目实际上是这样发展的。
    • 前进在逻辑上没有意义(即使在线性历史中),因为提交没有提及“未来”。充其量,您可以识别所有将相关提交作为父提交的提交。请注意,由于合并,向后移动也不是一件容易的事。
    • @MarceloCantos 好吧,这并不完全正确。 git log -p -m --first-parent --reverse 会很好地向您展示自一开始以来线性且准确的主线更改历史,合并历史中的更改汇总在一个差异中。
    【解决方案4】:

    使用提交的 SHA1 密钥,您可以执行以下操作:

    • 首先,找到您想要的特定文件的提交:

      git log -n &lt;# commits&gt; &lt;file-name&gt;

      这将根据您的&lt;# commits&gt; 生成特定文件的提交列表。

      提示:如果您不确定要查找的提交,一个很好的查找方法是使用以下命令:git diff &lt;commit-SHA1&gt;..HEAD &lt;file-name&gt;。此命令将显示当前版本的提交与特定文件的先前版本之间的差异。

      注意:提交的 SHA1 密钥在 git log -n 的列表中格式化为:

    提交&lt;SHA1 id&gt;

    • 其次,查看想要的版本:

      如果您找到了所需的提交/版本,只需使用命令:git checkout &lt;desired-SHA1&gt; &lt;file-name&gt;

      这会将您指定的文件版本放置在暂存区域中。要将其从暂存区中取出,只需使用以下命令:reset HEAD &lt;file-name&gt;

    要恢复到远程存储库指向的位置,只需使用命令:git checkout HEAD &lt;file-name&gt;

    【讨论】:

      【解决方案5】:

      我的情况是,我们有一个 master 分支,然后是另一个名为 17.0 的分支,在这个 17.0 内部有一个提交哈希没有说 “XYZ”。并且在该 XYZ 版本之前为客户提供构建。 现在我们遇到了一个错误,需要为该客户解决。所以我们需要为那个客户创建单独的分支,直到那个“xyz”哈希。 这就是我的做法。

      首先,我在本地计算机上使用该客户名称创建了一个文件夹。说客户名称是“AAA” 创建该文件夹后,在该文件夹内发出以下命令:

      1. git 初始化
      2. git clone 执行此命令后,您将位于 master 分支。所以切换到所需的分支
      3. git checkout 17.0 这会将您带到您的提交所在的分支
      4. git checkout 这将使您的存储库直到哈希提交。查看您的分支的名称,它已更改为该提交哈希号。现在给这个哈希一个分支名称
      5. git branch ABC 这将在您的本地计算机上创建一个新分支。
      6. git checkout ABC
      7. git push origin ABC 这会将这个分支推送到远程仓库并在 ​​git 服务器上创建一个分支。 大功告成。

      【讨论】:

        【解决方案6】:

        一种方法是创建对补丁的所有提交。签出初始提交,然后在阅读后按顺序应用补丁。

        使用git format-patch &lt;initial revision&gt;,然后使用git checkout &lt;initial revision&gt;。 你应该在你的director中得到一堆以四位数字开头的文件,这些文件是补丁。

        当您阅读完您的修订版后,只需执行git apply &lt;filename&gt;,它应该看起来像 git apply 0001-* 和计数。

        但我真的很想知道为什么你不想只阅读补丁本身呢?请把这个贴在你的 cmets 上,因为我很好奇。

        git 手册也给了我这个:

        git show next~10:Documentation/README
        

        显示文件 Documentation/README 的内容,因为它们在下一个分支的第 10 次最后提交中是最新的。

        您还可以查看git blame filename,它为您提供了一个列表,其中每一行都与一个提交哈希+作者相关联。

        【讨论】:

          【解决方案7】:

          要获取特定的提交代码,您需要该提交的哈希码。您可以通过两种方式获取该哈希码:

          1. 从您的 github/gitlab/bitbucket 帐户获取它。 (它在您的提交网址上,即:github.com/user/my_project/commit/commit_hash_code),或者您可以
          2. git log 并检查您最近在该分支上的提交。它将显示您提交的哈希码以及您在提交代码时留下的消息。只需复制然后执行git checkout commit_hash_code

          在移动到该代码之后,如果您想对其进行处理并进行更改,您应该使用git checkout -b &lt;new-branch-name&gt;创建另一个分支,否则将不会保留更改。

          【讨论】:

            猜你喜欢
            • 2015-11-24
            • 2013-05-12
            • 1970-01-01
            • 2010-09-12
            • 1970-01-01
            • 1970-01-01
            • 2019-02-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多