我想要相当于git的cd -。如果我在分支master中并且我签出foo,我希望能够键入类似git checkout -的内容以返回master,并且能够再次键入它以返回foo。
cd -
master
foo
git checkout -
这样的东西存在吗?实施起来难吗?
正如@Karl指出的和git checkout手册:
git checkout
作为特例,第N个最后一个分支的“@{-N}”语法检查出分支(而不是分离)。您还可以指定-这是与“@{-1}”同义。
所以git checkout -和git checkout @{-1}在这种情况下都有效
git checkout @{-1}
我认为最接近的是使用git reflog并解析最新的moving from branch1 to branch2和git checkout branch1
git reflog
moving from branch1 to branch2
git checkout branch1
从发行说明1.6.2
@{-1}是指您所在的最后一个分支。这是不仅在期望对象名称的地方接受,而且在任何地方接受分支名称是预期的,就像您键入了分支名称一样。例如git branch --track mybranch @{-1}、git merge @{-1}和git rev-parse --symbolic-full-name @{-1}将按预期工作。
@{-1}
git branch --track mybranch @{-1}
git merge @{-1}
git rev-parse --symbolic-full-name @{-1}
和
git checkout -是git checkout @{-1}的简写。
要查看以前的结帐列表:
i=0; while [ $? -eq 0 ]; do i=$((i+1)); echo -n "$i. "; git rev-parse --symbolic-full-name @{-$i} 2> /dev/null; done这个Bash单行脚本并不完美,但它应该适用于大多数情况。请注意,有时数字可能会跳过。提示:您可以将其添加到.bashrc作为function。
i=0; while [ $? -eq 0 ]; do i=$((i+1)); echo -n "$i. "; git rev-parse --symbolic-full-name @{-$i} 2> /dev/null; done
这个Bash单行脚本并不完美,但它应该适用于大多数情况。请注意,有时数字可能会跳过。
提示:您可以将其添加到.bashrc作为function。
.bashrc
function
现在最简单的方法是:
…这是一个别名:
如果你想了解更多,我在这里写了一篇关于它的文章:检查Git中的前一个分支。
只是在前面的答案中添加一些更多的细节来理解git checkout @{-N}的工作机制。它遍历reflg以检查签出历史记录,所以如果你想自己实现类似的东西,你应该能够解析git reflog的输出,寻找checkout:行。你可以检查git源sha1_name.c中的实现,特别是函数interpret_nth_prior_checkout。
git checkout @{-N}
checkout:
sha1_name.c
interpret_nth_prior_checkout
我带着同样的想法登陆这个问题来检查我以前的分支。我在Mac中使用ohmyz。下面的命令帮助了我。
Mac
$ gco -$ git checkout -
最流行的解决方案是:
其中N步计数的分支在结帐历史上向后移动。
以下是Git留档中描述其他答案给出的git checkout -和git checkout @{-1}解决方案的部分的指针:
当为任何命令指定一个Git修订版时,@{-<n>},例如@{-1}表示“在当前分支/提交之前,n个分支/提交被签出”。git checkout <branch>的留档重申:“您可以使用@{-N}语法来引用使用git checkout操作签出的第N个分支/提交。”
@{-<n>}
git checkout <branch>
@{-N}
对于git checkout的<branch>参数,"你也可以指定'-'这是'@{-1}'的同义词。
<branch>
-
Git版本2.23引入了git switch命令,您可以使用它来执行此操作(以及更多)。引用官方留档:
2.23
git switch
切换到指定的分支。工作树和索引被更新以匹配该分支。所有新的提交都将添加到该分支的尖端。
在您的特定情况下,您可以发出git switch -以返回您之前所在的分支。您可以再次执行相同的命令以返回第一个分支。
git switch -
这个命令不那么令人困惑,对初学者也很友好,因为它解决了使用git checkout时出现的常见混乱。
在我的情况下,我已经从母版切换到gh-page,这导致我所有的组件消失并被文件名“静态”和其他文件所取代。
git签出-m master帮助