有没有办法git checkout以前的分支?

时间:2011-08-26 15:09:12

标签: git git-checkout

我想要git等效于cd -。如果我在分支master并且我结帐foo,我希望能够输入类似git checkout -的内容返回master,并能够输入再次返回foo

有这样的事吗?是否难以实施?

8 个答案:

答案 0 :(得分:951)

来自release notes for 1.6.2

  

@{-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}

git checkout minus

如果你想了解更多相关信息,我在这里写了一篇关于它的文章: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 branch2git 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文档的各部分的指针,这些部分描述了其他答案给出的Truegit checkout -解决方案:

  • 为任何命令指定Git修订版时,@{-<n>}, e.g. @{-1}的意思是“第 n 个分支/提交在当前命令之前签出。” {{3}的文档}重申:“您可以使用git checkout @{-1}语法引用通过@{-N}操作检出的第N个最后一个分支/提交。”

  • 对于git checkout <branch>,“您还可以指定' git checkout ',它与'-'同义。”