我想要git等效于cd -
。如果我在分支master
并且我结帐foo
,我希望能够输入类似git checkout -
的内容返回master
,并能够输入再次返回foo
。
有这样的事吗?是否难以实施?
答案 0 :(得分:951)
@{-1}
是一种引用你所在的最后一个分支的方法。这是
不仅接受对象名称的预期,而且接受任何地方 分支名称是预期的,就像您键入分支名称一样 例如。git branch --track mybranch @{-1}
,git merge @{-1}
和
git rev-parse --symbolic-full-name @{-1}
可以按预期工作。
和
git checkout -
是git checkout @{-1}
的缩写。
答案 1 :(得分:148)
现在最简单的方法是:
git checkout -
...这是别名:
git checkout @{-1}
如果你想了解更多相关信息,我在这里写了一篇关于它的文章:Checkout The Previous Branch In Git。
答案 2 :(得分:25)
@Karl指出git checkout
手册:
作为一种特殊情况,第N个最后一个分支的“@ { - N}”语法检查 分支(而不是分离)。您也可以指定 - 这是 与“@ { - 1}”同义。
因此git checkout -
和git checkout @{-1}
都适用于此案例
最近我认为正在使用 git reflog
并解析最新的moving from branch1 to branch2
和git checkout branch1
答案 3 :(得分:10)
只需在前面的答案中添加更多细节,以了解git checkout @{-N}
的工作机制。它遍历reflog以检查结帐历史记录,因此如果您想要自己实现类似的功能,则应该能够解析git reflog
的输出,以查找checkout:
行。您可以在git源sha1_name.c
中检查实现,特别是函数interpret_nth_prior_checkout
。
答案 4 :(得分:2)
我以同样的想法登陆我的上一个分支。我在StartLimitInterval
中使用了ohmyz。下面的命令帮助了我。
Mac
答案 5 :(得分:2)
Git版本2.23
引入了git switch
命令,您可以用来执行此操作(以及更多操作)。引用官方文档:
切换到指定的分支。工作树和索引将更新以匹配分支。所有新提交都将添加到该分支的提示。
在特定情况下,您可以发出git switch -
返回到先前所在的分支。您可以再次执行同一命令以返回到第一个分支。
P.S。这并不是说您还不知道该怎么做(我问您问这个问题已经有7年了),但是该命令对于初学者来说不那么混乱和友好,因为它解决了常见的confusion使用git checkout
。
答案 6 :(得分:0)
最受欢迎的解决方案是:
git checkout @{-N}
其中N-要在结帐历史记录上移回的分支的步数。
答案 7 :(得分:0)
以下是指向Git文档的各部分的指针,这些部分描述了其他答案给出的True
和git checkout -
解决方案:
为任何命令指定Git修订版时,@{-<n>}
, e.g. @{-1}
的意思是“第 n 个分支/提交在当前命令之前签出。” {{3}的文档}重申:“您可以使用git checkout @{-1}
语法引用通过@{-N}
操作检出的第N个最后一个分支/提交。”
对于git checkout <branch>
,“您还可以指定' git checkout
',它与'-
'同义。”