如何在 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
是与此命令关联的消息。对于 commit
s,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
在 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
是与此命令关联的消息。对于 commit
s,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