865

我有点想要相当于cd -for git。如果我在分支中master并且我结帐foo,我希望能够输入类似于git checkout -go back to 的master内容,并且能够再次输入它以返回foo

这样的事情存在吗?实施起来会不会很困难?

4

8 回答 8

1482

来自1.6.2 的发行说明

@{-1}是一种引用您所在的最后一个分支的方法。这
不仅在需要对象名称的地方被接受,而且在需要分支名称的任何地方都被接受,并且就像您键入了分支名称一样。
例如git branch --track mybranch @{-1},git merge @{-1}
git rev-parse --symbolic-full-name @{-1}会按预期工作。

git checkout -是 的简写git checkout @{-1}

于 2011-08-26T16:05:01.967 回答
281

现在最简单的方法是:

git checkout -

...这是以下的别名:

git checkout @{-1}

git结帐减

如果你想了解更多,我在这里写了一篇完整的文章:Checkout The Previous Branch In Git

于 2015-10-18T14:23:15.510 回答
32

正如@Karl 指出和git checkout手册:

作为一种特殊情况,第 N 个最后一个分支的“@{-N}”语法检出分支(而不是分离)。您也可以指定 - 与“@{-1}”同义。

所以两者都git checkout -可以git checkout @{-1}在这种情况下工作

我认为最接近的是使用git reflog并解析最新的moving from branch1 to branch2git checkout branch1

于 2011-08-26T15:16:36.810 回答
32

Git 版本2.23引入了git switch您可以用来执行此操作的命令(以及更多)。引用官方文档:

切换到指定分支。更新工作树和索引以匹配分支。所有新的提交都会被添加到这个分支的顶端。

在您的特定情况下,您可以发出git switch -回到您之前所在的分支。您可以再次执行相同的命令以返回第一个分支。

PS 这并不是说你还不知道如何去做(我的意思是你问这个问题已经 7 年了),但是这个命令对初学者来说不那么混乱和友好,因为它解决使用git checkout.

于 2019-08-22T11:42:13.553 回答
12

我带着同样的想法来到了这个问题,以检查我以前的分支。我Mac. _ 下面的命令帮助了我。

$ gco -
$ git checkout -
于 2017-08-02T16:34:59.560 回答
11

只需在前面的答案中添加更多细节,以了解其git checkout @{-N}工作机制。它遍历 reflog 以检查结帐历史记录,因此如果您想自己实现类似的东西,您应该能够解析git reflog查找checkout:行的输出。您可以检查 git 源中的实现sha1_name.c,特别是功能interpret_nth_prior_checkout

于 2016-07-27T17:15:08.423 回答
2

最流行的解决方案是:

git checkout @{-N}

其中 N - 退回结帐历史记录的分支的步数。

于 2018-11-26T10:55:36.157 回答
1

以下是 Git 文档部分的指针,这些部分描述了其他答案给出的解决方案git checkout -和解决方案:git checkout @{-1}

  • 当为任何命令指定 Git 修订时@{-<n>},例如@{-1}表示“在当前分支/提交之前签出的第n个分支/提交”。git checkout <branch>重申文档:“您可以使用@{-N}语法来引用使用操作签出的最后 N 个分支/提交git checkout。”</p>

  • 对于 的<branch>参数git checkout,“您还可以指定 '<strong> -',它与 '<code>@{-1}' 同义。”</p>

于 2019-01-16T23:07:28.847 回答