转到特定版本


581

我克隆了某个项目的git存储库。我可以将文件转为初始状态吗?当我查看文件时,是否转至最新的修订版2、3、4 ...?我想对项目的发展进行概述。

Answers:


871

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


2
你可以做到这一点git log -n1。但是,除非git checkout失败,否则就是浪费精力。
Marcelo Cantos

2
有用。我必须使用完整的sha1(而不是部分)。如果我想将该项目进行第二次修订?git log现在仅显示第一个提交,我可以找出下一个提交的sha1吗?
xralf

6
您只需要使用足够的sha1即可保证唯一性。也许您碰巧了。Git没有“下一个”提交的概念。历史记录是DAG,所有箭头都指向后方。您应该运行git log --oneline并将输出粘贴到文本文件中以供参考(它提供的缩写sha1 sums保证是唯一的)。另一种选择,如果你的历史是线性的,是要弄清楚有多少的提交有从第一次提交,直到master和使用git checkout master~543(如果有543次提交),然后git checkout master~542,等
马塞洛Cantos的

19
以及如何从“ git checkout <sha1>”签出回到当前提交?
アレックス

6
@AlexanderSupertramp检出分支。
Marcelo Cantos 2015年

50

要转到特定版本/提交,请运行以下命令。您可以从中获得的哈希码git log --oneline -n 10

git reset --hard HASH-CODE

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


1
请注意,a reset不仅会签出图表中的特定点,还会移动您当前签出的分支
Liam

同样使用reset,您所有待处理的更改也会被丢弃。
WilliamKF

2
--hard标志将删除哈希表之后的所有提交...。可能要在此处添加一点点tid。我确信人们已经失去了历史,并想知道为什么。
乌拉斯奎尔

git pull --rebase仅在您的仓库有遥控器并且是最新的时才有效。
基思·汤普森

19

您可以使用诸如之类的工具来获得项目历史的图形视图gitk。赶紧跑:

gitk --all

如果要签出特定分支:

git checkout <branch name>

对于特定的提交,请使用SHA1哈希而不是分支名称。(请参阅《Git社区手册》中的“ 树状结构,这是一本不错的书,以了解用于导航树的其他选项。)

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

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


2
请注意:git不会通过给您一个项目的线性历史记录来欺骗您。除非项目实际上以这种方式发展。
Andres Jaan Tack

前进在逻辑上是没有意义的(即使在线性历史中也是如此),因为提交未引用“未来”。充其量,您可以将所有具有相关提交的提交标识为父级。请注意,由于合并,向后移动也不是一件容易的事。
Marcelo Cantos

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>


2

我当时处于以下情况:我们有一个master分支,然后另一个分支称为17.0,并且在此17.0内部有一个提交哈希值,不说“ XYZ”。直到该XYZ修订版都为客户提供了构建。现在,我们遇到了一个错误,该错误需要为该客户解决。因此,我们需要为该客户创建单独的分支,直到该“ xyz”哈希为止。这就是我的做法。

首先,我在本地计算机上使用该客户名称创建了一个文件夹。假设该文件夹创建后,客户名称为“ AAA”,则在该文件夹内执行以下命令:

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

1

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

使用git format-patch <initial revision>然后git checkout <initial revision>。您应该在导向器中得到一堆文件,文件的开头是四位数的补丁。

阅读完您的修订后,只需要做git apply <filename>一下 就可以了git apply 0001-*

但是我真的很好奇,为什么您不只是想阅读补丁本身?请将此添加到您的评论中,因为我很好奇。

git手册也给了我这个:

git show next~10:Documentation/README

显示文档“文档/自述文件”的内容,因为它们是该分支的下一个第十次提交中的最新内容。

您还可以查看git blame filename其中的清单,其中每一行都与提交哈希+作者相关联。


1

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

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

转到该代码后,如果要对其进行处理并进行更改,则应使用进行另一个分支git checkout -b <new-branch-name>,否则,更改将不会保留。


0

要检查提交(nb,您正在查看过去!)。

  • git checkout“ commmitHash”

要从提交中残酷地重启并删除您以后可能弄乱的那些分支。

  • git reset --hard“ commmitHash”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.