如何在 git 中获取比当前提交更新的提交的哈希值?

How do I get hashes of newer commits than the current one in git?

git 我使用 gitk 查看几周前提交的哈希值,我使用 git checkout 和那个哈希值来获取我的源文件到之前的那个状态。

现在我想转到几天后的提交,但是 gitk 只显示当前提交之前的提交,而不是以后的提交。

使用git log也只显示到当前那个。

如何列出以后的提交?

您可以使用 git reflog 查看您的 HEAD 指针访问过的所有提交的哈希值,即您在工作目录中曾经指向的所有提交。

如果您无法使用 git log 找到您正在寻找的提交,这意味着您正在寻找的提交不是您当前所在的提交的祖先。如果您找不到您的提交在 reflog 中,您可能会发现(直接或间接)基于它的提交。如果你找到它,检查它,你寻找的提交现在应该列在 git log.

你可以使用

git log --all --oneline --graph --decorate

可视化您的 git 树。你现在处于分离状态; return 到你之前所在的位置;你需要使用:

git checkout <branch-name>

其中 <branch-name> 是您正在处理的分支。

您要检出的提交是否在您的任何分支的祖先中?换句话说,您当前的任何分支是否包含您正在搜索的提交中所做的更改?

如果是这样,git log --all 将在日志中显示此提交。添加 --oneline and/or --decorate 标志可能会使此输出更容易搜索,如果您要查找的只是提交消息:

$ git log --all --oneline --decorate

如果您的提交 不是 在您的任何分支的祖先中(因此未显示 log --all),那么您必须搜索 git reflog. reflog 本质上是您的 HEAD 指向的所有提交的历史记录。当您当前在工作目录中签出这些文件时,HEAD 指向提交。

reflog 的格式是

hash HEAD@{n}: command: message

其中 command 是将 HEAD 指向此特定位置的命令,message 是与此命令关联的消息。对于 commits,message 是您输入的提交消息。

由于这种结构良好的格式,我们可以使用 grep 使输出更易于阅读。例如,如果你知道你最近检查了有问题的提交,你可以 运行:

$ git reflog | grep checkout

或者只查看提交你可以 运行:

$ git reflog | grep commit

根据您要搜索的内容,您还可以通过许多其他方式使用 grep:

$ git reflog | grep "phrase in commit message" --ignore-case
$ git reflog | grep "individual\|words\|in\|message" --ignore-case