我有时会检查一些以前版本的代码来检查或测试。如果我想修改以前的提交,我已经看到了如何操作的说明 - 但是假设我没有做任何更改。我做完之后,例如git checkout HEAD^
,我如何回到分支的顶端?.. git log
不再向我显示最新提交的SHA。
答案 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 $(...)
使用subshell的输出作为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 $(...)
使用subshell的输出作为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