【发布时间】:2011-11-24 05:52:51
【问题描述】:
我克隆了某个项目的 git 存储库。我可以将文件转到初始状态,当我查看文件时转到修订版 2、3、4 ......最新版本?我想大致了解一下这个项目是如何发展的。
【问题讨论】:
标签: git revision revision-history
我克隆了某个项目的 git 存储库。我可以将文件转到初始状态,当我查看文件时转到修订版 2、3、4 ......最新版本?我想大致了解一下这个项目是如何发展的。
【问题讨论】:
标签: git revision revision-history
在执行之前这个命令请记住,它会让你处于分离头部状态
使用git checkout <sha1> 来检查特定的提交。
其中<sha1> 是您可以通过git log 获得的提交唯一编号
以下是您处于分离头状态后的一些选项:
git checkout <existingBranch> 并替换文件git checkout -b <new_branch_name> <sha1>
【讨论】:
git log -n1。但除非git checkout 失败,否则就是白费力气。
git log --oneline 并将输出粘贴到文本文件中以供参考(它提供的缩写 sha1 总和保证是唯一的)。如果您的历史是线性的,另一种选择是计算从第一次提交到master 的提交次数,并使用git checkout master~543(如果有 543 次提交),然后使用git checkout master~542,等等。
git checkout -b <new_branch_name> <sha1> :检查提交到分支。
要转到特定版本/提交,请运行以下命令。你可以从git log --oneline -n 10获得HASH-CODE
git reset --hard HASH-CODE
注意 - 重置到特定版本/提交后,如果您想恢复所有被丢弃的提交,您可以运行 git pull --rebase。
【讨论】:
reset 不仅会检出图表中的特定点,还会移动您当前检出的分支
reset,您的所有未决更改都将被丢弃。
git pull --rebase 仅在您有远程仓库的情况下才有效并且它是最新的。
您可以使用gitk 等工具获得项目历史的图形视图。运行:
gitk --all
如果你想签出一个特定的分支:
git checkout <branch name>
对于特定的提交,使用 SHA1 哈希而不是分支名称。 (请参阅 Git 社区手册 中的 Treeishes,这是一本不错的读物,可以查看导航树的其他选项。)
git log 也有一整套选项来显示详细或摘要历史记录。
我不知道在提交历史记录中向前 移动的简单方法。具有线性历史的项目可能并不那么普遍。像使用 SVN 或 CVS 那样进行“修订”的想法并不能很好地映射到 Git。
【讨论】:
git log -p -m --first-parent --reverse 会很好地向您展示自一开始以来线性且准确的主线更改历史,合并历史中的更改汇总在一个差异中。
使用提交的 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>
【讨论】:
我的情况是,我们有一个 master 分支,然后是另一个名为 17.0 的分支,在这个 17.0 内部有一个提交哈希没有说 “XYZ”。并且在该 XYZ 版本之前为客户提供构建。 现在我们遇到了一个错误,需要为该客户解决。所以我们需要为那个客户创建单独的分支,直到那个“xyz”哈希。 这就是我的做法。
首先,我在本地计算机上使用该客户名称创建了一个文件夹。说客户名称是“AAA” 创建该文件夹后,在该文件夹内发出以下命令:
【讨论】:
一种方法是创建对补丁的所有提交。签出初始提交,然后在阅读后按顺序应用补丁。
使用git format-patch <initial revision>,然后使用git checkout <initial revision>。
你应该在你的director中得到一堆以四位数字开头的文件,这些文件是补丁。
当您阅读完您的修订版后,只需执行git apply <filename>,它应该看起来像
git apply 0001-* 和计数。
但我真的很想知道为什么你不想只阅读补丁本身呢?请把这个贴在你的 cmets 上,因为我很好奇。
git 手册也给了我这个:
git show next~10:Documentation/README显示文件 Documentation/README 的内容,因为它们在下一个分支的第 10 次最后提交中是最新的。
您还可以查看git blame filename,它为您提供了一个列表,其中每一行都与一个提交哈希+作者相关联。
【讨论】:
要获取特定的提交代码,您需要该提交的哈希码。您可以通过两种方式获取该哈希码:
git log 并检查您最近在该分支上的提交。它将显示您提交的哈希码以及您在提交代码时留下的消息。只需复制然后执行git checkout commit_hash_code
在移动到该代码之后,如果您想对其进行处理并进行更改,您应该使用git checkout -b <new-branch-name>创建另一个分支,否则将不会保留更改。
【讨论】: