转到特定版本

xra*_*alf 518 git revision revision-history

我克隆了某个项目的git存储库.我可以将文件转换为初始状态吗?当我查看文件时,请转到修订版2,3,4 ...最近?我想概述项目是如何发展的.

Mar*_*tos 783

使用git checkout <sha1>检查出一个特定的提交.

  • 以及如何从"git checkout <sha1>"签出回到当前提交? (14认同)
  • `git checkout -b &lt;new_branch_name&gt; &lt;sha1&gt;` :检查对分支的提交。 (8认同)
  • 你应该只需要使用足够的sha1来保证唯一性.也许你有一个不幸的巧合.Git没有"下一次"提交的概念; 历史是一个DAG,所有箭头都指向后方.您应该运行`git log --oneline`并将输出粘贴到文本文件中以供参考(它提供的缩写sha1总和保证是唯一的).另一个选择,如果你的历史是线性的,就是弄清楚从第一次提交到`master`有多少提交,并使用`git checkout master~543`(如果有543次提交),那么`git checkout master~542 `等 (5认同)
  • @AlexanderSupertramp结帐分支. (5认同)
  • 你可以这样做`git log -n1`.但除非`git checkout`失败,否则浪费精力. (2认同)
  • 有用。我必须使用完整的sha1(而不是部分)。如果我想将该项目进行第二次修订?`git log`现在只显示第一个提交,我能找到下一个提交的sha1吗? (2认同)
  • @MarceloCantos 我想说的是,在结帐后,如何返回主分支或返回到他们最初所在的提交?我假设它的`git checkout master` 或其他一些分支取决于你在哪里工作? (2认同)
  • 啊,现在我明白了;我放错了隐含的逗号。是的,没错,git checkout 可用于转到您想要的任何提交,通过 id、标签、分支或任何其他方法来指定提交。 (2认同)
  • 完成结帐后,您可能还希望返回到此处所述的最新版本:/sf/ask/404053471/ (2认同)

J4c*_*4cK 42

要转到特定版本/提交,请执行以下命令.您可以从中得到HASH-CODEgit log --oneline -n 10

git reset --hard HASH-CODE
Run Code Online (Sandbox Code Playgroud)

- 重置为特定版本/提交后git pull --rebase,如果要恢复所有丢弃的提交,则可以运行.

  • --hard 标志将删除所述哈希之后的任何提交......可能想在此处添加一点点。我确信人们已经失去了历史并想知道为什么。 (4认同)

Mat*_*Mat 18

您可以使用类似工具获取项目历史的图形视图gitk.赶紧跑:

gitk --all
Run Code Online (Sandbox Code Playgroud)

如果要签出特定分支:

git checkout <branch name>
Run Code Online (Sandbox Code Playgroud)

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

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

我不知道在提交历史中前进的简单方法.具有线性历史的项目可能并不常见.像SVN或CVS一样的"修订版"的想法并没有在Git中很好地映射.

  • 请注意:通过为您提供项目的单一线性历史记录,git不会欺骗您.除非项目实际上是这样演变的. (2认同)

Wiz*_*ard 5

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

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

    git log -n <# commits> <file-name>

    根据您的<# commits>,这将生成特定文件的提交列表。

    提示:如果不确定要查找的提交内容,可以使用以下命令来找到答案git diff <commit-SHA1>..HEAD <file-name>。此命令将显示提交的当前版本与特定文件的提交的先前版本之间的差异。

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

承诺 <SHA1 id>

  • 其次,签出所需的版本:

    如果找到所需的提交/版本,只需使用以下命令: git checkout <desired-SHA1> <file-name>

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

要恢复到指向远程存储库的位置,只需使用以下命令: git checkout HEAD <file-name>