在签出先前的提交后如何返回到最新的提交?

时间:2010-03-11 17:42:59

标签: git version-control

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

10 个答案:

答案 0 :(得分:501)

如果您知道要返回的提交是某个分支的头部,或者已标记,那么您可以

git checkout branchname

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


编辑添加:

在较新版本的Git中,如果您只运行git checkout或其他内容移动HEAD一次,您也可以

git checkout -

切换回上次结账前的任何地方。这是通过对shell习语cd -的类比来推动回到以前的工作目录。

答案 1 :(得分:22)

git checkout master

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

答案 2 :(得分:16)

刚才遇到这个问题并有一些要补充的内容

转到最近的提交:

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

<强>解释

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

注意:

这会导致分离头(因为我们直接签出提交)。使用sed提取分支名称可以避免这种情况,如下所述。

转到最近提交的分支:

git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')

<强>解释

git log --branches显示所有本地分支机构的提交日志 -1限制一次提交→最近一次提交 --pretty=format:"%D"格式仅显示引用名称
| sed 's/.*, //g'忽略除了多个引用的最后一个(*)
git checkout $(...)使用subshel​​l的输出作为checkout的参数

*)首先列出HEAD和远程分支,本地分支按字母顺序按降序列出,因此剩余的分支将按字母顺序排列第一个分支名称

注意:

如果该提交有多个,则始终只使用(按字母顺序)第一个分支名称。

无论如何,我认为最好的解决方案就是显示最近提交的引用名称,以了解结帐地点:

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

E.g。为该命令创建别名git top

答案 3 :(得分:9)

查看图形GUI ... gitk它显示所有提交。有时工作图形更容易... ^^

答案 4 :(得分:7)

您可以使用以下git命令之一:

git checkout master
git checkout branchname

答案 5 :(得分:2)

显示所有分支并提交
git log --branches --oneline

显示上一次提交
git log --branches -1 --oneline

在最后一次提交之前显示
git log --branches -2 --oneline

答案 6 :(得分:0)

如果您的分支不同于master,则一种简单的方法是检出该分支,然后检出master。瞧,您又回到了主人的顶端。可能有更聪明的方法...

答案 7 :(得分:0)

git reflog //find the hash of the commit that you want to checkout
git checkout <commit number>>

答案 8 :(得分:0)

您只需执行git pull origin branchname。它将再次获取最新的提交。

答案 9 :(得分:-3)

如果您的最新提交在主分支上,则可以使用

git checkout master