如何检查以前的提交后回到最新的提交?

我有时会检查一些以前版本的代码来检查或testing。 如果我想修改以前的提交,我已经看到了怎么做的说明 – 但是假设我没有做任何修改。 在完成了git checkout HEAD^ ,我该如何回到分支的顶端? git log不再显示我最近提交的SHA。

如果你知道你想返回的提交是某个分支的头部,或者被标记了,那么你可以

 git checkout branchname 

您也可以使用git reflog来查看过去您的HEAD(或其他参考)指向的其他内容。


编辑添加:

在新版本的Git中,如果你只运行git checkout或者其他的东西来移动HEAD一次,你也可以

 git checkout - 

切换回最后一次结帐前的位置。 这是由于类似于shell的习惯用法cd -回到之前的任何工作目录。

git checkout master

主人是小费,还是最后一次提交。 gitk只会显示你当时在树中的位置。 git reflog会显示所有的提交,但在这种情况下,你只是想提示,所以git checkout master。

刚刚遇到这个问题,有一些补充

要去最近的提交:

 git checkout $(git log --branches -1 --pretty=format:"%H") 

说明:

git log --branches显示所有本地分支提交的日志
-1限制为一个提交→最近的提交
--pretty=format:"%H"格式只显示提交散列
git checkout $(...)使用subshel​​l的输出作为签出的参数

注意:

这将导致一个分离的头虽然(因为我们直接签出提交)。 这可以通过使用sed提取分支名称来避免,如下所述。


要转到最近一次提交的分支:

 git checkout $(git log --branches -1 --pretty=format:'%D' |sed 's/HEAD -> \|tag: [^,]*\|,.*//g') 

说明:

git log --branches显示所有本地分支提交的日志
-1限制为一个提交→最近的提交
--pretty=format:"%D"格式只显示参考名称
|sed 's/HEAD -> \|tag: [^,]*\|,.*//g'忽略HEAD,标记并提取多个分支名称中的第一个
git checkout $(...)使用subshel​​l的输出作为签出的参数

注意:

如果该提交有多个,这将始终只使用第一个分支名称。


无论如何,我认为最好的解决办法就是显示最近提交的ref名称,以知道在哪里签出:

 git log --branches -1 --pretty=format:'%D' 

例如,为该命令创build别名git top

看看graphics用户界面… gitk它显示所有提交。 有时候工作起来比较容易… ^^

你可以使用下面的git命令之一:

 git checkout master git checkout branchname 

如果您的最新提交是在主分支上,您可以简单地使用

 git checkout master