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

早过忘川 提交于 2020-02-26 00:09:01

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


#1楼

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


#2楼

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

git checkout branchname

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


编辑添加:

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

git checkout -

切换回上次结账前的任何地方。 这是通过类似于shell习语cd -动机cd -回到之前的任何工作目录。


#3楼

git checkout master

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


#4楼

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

要转到最近的提交:

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' | sed 's/.*, //g'忽略除多个引用中的最后一个(*)
git checkout $(...)使用subshel​​l的输出作为checkout的参数

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

注意:

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


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

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

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


#5楼

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

git checkout master
git checkout branchname
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!