我有时会检查一些以前版本的代码来检查或测试。如果我希望修改以前的提交,我已经看到了关于该怎么做的说明——但假设我不做任何更改。当我完成了例如git checkout HEAD^,我如何回到分支的顶端?..git日志不再显示我最近提交的SHA。


当前回答

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

git checkout master
git checkout branchname

其他回答

刚才碰到这个问题,有什么想补充的

转到最近的提交:

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

解释:

Git log——branches显示所有本地分支的提交日志 -1 limit to one commit→最近一次提交 ——pretty=format:"%H"格式,只显示提交哈希 Git checkout $(…)使用subshell的输出作为checkout的参数

注意:

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


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

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

解释:

Git log——branches显示所有本地分支的提交日志 -1 limit to one commit→最近一次提交 ——pretty=format:“%D”格式,只显示引用名 | sed 's/。*, //g'忽略除最后一个以外的所有引用(*) Git checkout $(…)使用subshell的输出作为checkout的参数

*) HEAD和远程分支按字母降序排列在前面,本地分支按字母降序排列在最后,因此剩下的将是按字母降序排列的第一个分支名称

注意:

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


不管怎样,我认为最好的解决方案是显示最近提交的引用名称,以知道签出到哪里:

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

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

对于git版本>=2.33.0

git switch -d -

允许您检出到先前检出的提交。因此,您可以通过在两次提交之间切换来来回执行。请注意-d标志允许您在分离状态下浏览提交。

如果您有一个不同于master的分支,一个简单的方法是签出该分支,然后签出master。瞧,你又回到了大师的顶端。也许有更聪明的方法……

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

Git checkout master

大师是秘诀,还是最后的承诺。Gitk只会显示你当时在树中的位置。Git reflog将显示所有提交,但在本例中,您只需要提示,因此Git checkout master。