Leo*_*yev 433 git version-control
我有时会检查一些以前版本的代码来检查或测试.如果我想修改以前的提交,我已经看到了如何操作的说明 - 但是假设我没有做任何更改.在我完成例如之后,我git checkout HEAD^如何回到分支的尖端?... git log不再向我显示最新提交的SHA.
Phi*_*ler 548
如果你知道你想要返回的提交是某个分支的头部,或者被标记,那么你可以
git checkout branchname
Run Code Online (Sandbox Code Playgroud)
您还可以使用git reflog以查看过去HEAD(或任何其他引用)指向的其他提交内容.
编辑添加:
在较新版本的Git中,如果您只运行git checkout或其他东西移动HEAD一次,您也可以这样做
git checkout -
Run Code Online (Sandbox Code Playgroud)
切换回上次结账前的任何地方.这可以通过类比shell的习惯cd -来回到以前的工作目录.
小智 24
git checkout master
master是提示或最后提交. gitk只会告诉你当时你在树上的位置. git reflog将显示所有提交,但在这种情况下,你只需要提示,所以git checkout master.
816*_*055 18
刚刚遇到这个问题并有一些补充
要转到最近的提交:
git checkout $(git log --branches -1 --pretty=format:"%H")
Run Code Online (Sandbox Code Playgroud)
说明:
git log --branches显示从所有本地分支
-1限制到一个提交的提交日志→最近提交
--pretty=format:"%H"格式仅显示提交哈希
git checkout $(...)使用子shell的输出作为结帐的参数
注意:
这将导致一个分离的头(因为我们直接签出提交).这可以通过使用提取分支名称来避免sed,如下所述.
要转到最近提交的分支:
git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
Run Code Online (Sandbox Code Playgroud)
说明:
git log --branches显示从所有本地分支
-1限制到一个提交的提交日志→最近的提交
--pretty=format:"%D"格式仅显示引用名称
| sed 's/.*, //g'忽略除多个引用的最后一个(*)
git checkout $(...)使用subshell的输出作为结帐的参数
*)首先列出HEAD和远程分支,按字母顺序依次列出最后的本地分支,因此剩余的分支将按字母顺序排列第一个分支名称
注意:
如果该提交有多个,则始终只使用(按字母顺序)第一个分支名称.
无论如何,我认为最好的解决方案就是显示最近提交的引用名称以了解到哪里结帐:
git log --branches -1 --pretty=format:'%D'
Run Code Online (Sandbox Code Playgroud)
例如git top,为该命令创建别名.
小智 7
您可以使用以下git命令之一:
git checkout master
git checkout branchname
Run Code Online (Sandbox Code Playgroud)
git reflog //find the hash of the commit that you want to checkout
git checkout <commit number>>
Run Code Online (Sandbox Code Playgroud)