2010-03-11 66 views
302

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

+3

关于'混帐log'句子你可以运行'git log --all'(或者更有用的'git log --oneline --graph --all')。 – Wildcard

回答

385

如果你知道你想回到提交一些部门的负责人,或者被标记,那么你可以

git checkout branchname 

你可以还使用git reflog来查看过去您的HEAD(或任何其他参考)指出的其他提交内容。


编辑补充:

在Git中的新版本,如果你只跑了git checkout或别的东西将您HEAD一次,你也可以做

git checkout - 

切换回无论在最后一次结账之前。这是由类比外壳成语cd -回去任何工作目录中的一个动机是以前。

+15

我想提一下,典型的例子是“git checkout master”。我学习使用git时遇到的一个困难是不知道我实际上可以用什么特定的关键字(例如“主”)来代替“branchname”这样的占位符词。 – AbePralle

+3

'master'并不是真正的任何关键字,'HEAD'的方式。它只是新存储库中的默认分支名称。您可以运行'git branch'来获取存储库中的分支列表,'git tag -l'获取标签列表。同样,'origin'是存储库克隆的远程的默认名称,但没有什么特别之处。 – Novelocrat

+3

如果不清楚,'git reflog'会给你一个散列列表,在这一点上你可以使用'git checkout [commit-hash]'。 – jbnunn

6

看看图形用户界面... gitk它显示所有提交。有时它是更容易的工作图形... ^^

+0

是的,这实际上是我以前做过的 - 但我目前没有可用的GUI –

19

git的结帐主

师傅一角,或最后一次提交。 gitk只会显示您当时在树中的位置。 git reflog将显示所有提交,但在这种情况下,您只需要提示,所以git checkout master。

+0

gitk --all显示所有提交。 – Kharoof

11

过这个问题就来了刚才的事,并添加

要转到最近承诺:

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

说明:

git log --branches显示提交的日志从所有本地分支
-1限制为一次提交→最近提交
--pretty=format:"%H"格式,只显示提交哈希壳层的
git checkout $(...)使用输出参数用于结帐

注:

这将导致虽然一个分离的头(因为我们直接结帐提交)。这可以通过使用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 $(...)使用输出参数用于结帐

注:

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


无论如何,我认为最好的解决办法只是为最近显示裁判的名字提交知道在哪里签到:

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

例如为该命令创建别名git top

3

您可以使用此以下的Git命令之一:

git checkout master 
git checkout branchname 
-2

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

git checkout master 
+1

欢迎来到SO。不建议发布已提交的答案。这个解决方案已经提到了很多次。 – AChampion

相关问题