2016-01-20 88 views
1

in git我使用gitk来查看几周前提交的提交的哈希值,并使用该哈希的git checkout将我的源文件恢复到之前的状态。如何获得比git中当前更新的提交更新的哈希?

现在我想去几天后的提交,但是gitk只显示提交直到当前的提交,而不是后来的提交。

使用git log也只显示到目前为止。

如何列出以后的提交?

+0

只要结账到头然后回去。 – jonrsharpe

回答

2

您想要在任何分支的血统中结账吗?换句话说,您当前的分支中是否包含您正在搜索的提交中所做的更改?

如果是这样,git log --all将在日志中显示此提交。添加--oneline和/或--decorate标志可能使这种输出更容易通过搜索,如果所有你要找的是提交信息:

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

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

的引用日志的格式是

hash [email protected]{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 
0

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

如果您无法使用git log获得提交,这意味着您正在查找的提交不是您当前提交的提交的祖先。如果您无法在reflog中找到提交,可以找到一个基于它(直接或间接)的提交。如果找到它,请检查它,并且现在应该列出您提交的提交内容git log

0

可以使用

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

可视化你的Git树。你现在处于分离状态;回到你以前的地方;您需要使用:

git checkout <branch-name> 

其中<branch-name>是您正在研究的分支。