有时,我会检查一些先前版本的代码以进行检查或测试。我已经看到了有关要修改以前的提交的说明,但是假设我没有进行任何更改。完成例如以后git checkout HEAD^
,如何返回分支的尖端?.. git log
不再向我显示最新提交的SHA。
有时,我会检查一些先前版本的代码以进行检查或测试。我已经看到了有关要修改以前的提交的说明,但是假设我没有进行任何更改。完成例如以后git checkout HEAD^
,如何返回分支的尖端?.. git log
不再向我显示最新提交的SHA。
Answers:
如果您知道要返回的提交是某个分支的开头或已被标记,则可以
git checkout branchname
您还可以git reflog
用来查看您的HEAD(或任何其他引用)过去指向的其他提交。
编辑添加:
在较新版本的Git中,如果您只运行git checkout
或其他移动HEAD
一次,也可以
git checkout -
切换回上次结帐之前的位置。这是通过类比成语的动机来实现的cd -
,它可以返回到先前所在的任何工作目录。
master
实际上不是任何关键字,方式HEAD
是。它只是新存储库中的默认分支名称。您可以运行git branch
以获取存储库中的分支git tag -l
列表以及标签列表。同样,origin
是从中克隆存储库的远程服务器的默认名称,但没有什么特别的。
git reflog
提供一个哈希列表,此时可以使用git checkout [commit-hash]
。
git checkout主
master是提示,或最后一次提交。 gitk只会显示您当时在树中的位置。 git reflog将显示所有提交,但是在这种情况下,您只需要提示,因此git checkout master。
git checkout branchname
刚刚遇到了这个问题,并添加了一些内容
转到最近的提交:
git checkout $(git log --branches -1 --pretty=format:"%H")
说明:
git log --branches
显示所有本地分支的提交日志
-1
限制为一次提交→最新提交
--pretty=format:"%H"
格式仅显示提交哈希
git checkout $(...)
,将subshell的输出用作签出的参数
注意:
但是,这将导致头部分离(因为我们直接签出到提交)。可以通过使用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的输出作为结帐参数
*)HEAD和远程分支首先列出,本地分支最后按字母降序列出,因此剩下的将是按字母顺序第一个分支名称
注意:
如果该提交有多个,则将始终仅使用(按字母顺序)第一个分支名称。
无论如何,我认为最好的解决方案就是显示最近提交的引用名称,以了解在何处签出:
git log --branches -1 --pretty=format:'%D'
例如git top
,为该命令创建别名。
alias git-head='git checkout $(git log --branches -1 --pretty=format:"%D" | sed "s/.*, //g")'
您可以为此使用以下git命令之一:
git checkout master
git checkout branchname
显示所有分支并提交
git log --branches --oneline
显示最后一次提交
git log --branches -1 --oneline
在最后一次提交之前显示
git log --branches -2 --oneline
git reflog //find the hash of the commit that you want to checkout
git checkout <commit number>>
你可以简单地做git pull origin branchname
。它将再次获取最新的提交。
git log
您的问题的句子,您可以随时运行git log --all
(或更有用的是git log --oneline --graph --all
)。