我有时会检查一些以前版本的代码来检查或测试。如果我希望修改以前的提交,我已经看到了关于该怎么做的说明——但假设我不做任何更改。在我完成了例如git checkout HEAD^之后,我如何回到分支的尖端?git log不再显示我最近提交的SHA。
git checkout HEAD^
git log
看看图形化的GUI…gitk显示所有提交。有时图形化工作更容易…^ ^
gitk
如果你知道你想要返回的提交是某个分支的头,或者被标记了,那么你可以
git checkout branchname
你也可以使用git reflog来查看你的HEAD(或任何其他引用)在过去指向的其他提交。
git reflog
编辑补充:
在新版本的Git中,如果您只运行git checkout或其他东西来移动HEAD一次,您也可以这样做
git checkout
HEAD
git checkout -
换回上次结账前的位置。这是由于类似于shell成语cd -,以便返回到之前所在的任何工作目录。
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 $(...)使用subshell的输出作为checkout的参数
git log --branches
-1
--pretty=format:"%H"
git checkout $(...)
注意:
这将导致一个分离的头(因为我们直接签出到提交)。这可以通过使用sed提取分支名称来避免,如下所述。
sed
转到最近一次提交的分支:
git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
git log --branches显示来自所有本地分支的提交日志 -1限制一次提交→最近一次提交 --pretty=format:"%D"格式只显示ref名称 | sed 's/.*, //g'忽略除最后一个引用外的所有引用(*) git checkout $(...)使用subshell的输出作为checkout的参数
--pretty=format:"%D"
| sed 's/.*, //g'
*) HEAD和远程分支按字母降序排列在前面,本地分支按字母降序排列在最后,因此剩下的将是按字母降序排列的第一个分支名称
如果该提交有多个分支,则始终只使用(按字母顺序)第一个分支名称。
不管怎样,我认为最好的解决方案是显示最近提交的引用名称,以知道签出到哪里:
git log --branches -1 --pretty=format:'%D'
例如,为该命令创建别名git top。
git top
你可以使用以下git命令之一:
git checkout master git checkout branchname
如果您的最新提交是在主分支上,您可以简单地使用
git checkout master
如果您有一个不同于master的分支,一个简单的方法是签出该分支,然后签出master。瞧,你又回到了大师的顶端。也许有更聪明的方法……
git reflog //find the hash of the commit that you want to checkout git checkout <commit number>>
显示所有分支并提交 Git日志——分支——oneline
show last commit Git日志——分支-1——oneline
show before last commit Git日志——分支-2——oneline
您可以简单地执行git pull origin branchname。它将再次获取最新的提交。
git pull origin branchname
对于git版本>=2.33.0
git
git switch -d -
允许您检出到先前检出的提交。因此,您可以通过在两次提交之间切换来来回执行。请注意,-d标志允许您在分离状态下浏览提交。
-d