我想要等价于cd -的git。如果我在master分支,我签出foo,我希望能够键入类似git checkout的东西-返回到master,并能够再次键入它返回到foo。

这样的东西存在吗?实施起来会很难吗?


当前回答

以下是Git文档中描述Git签出-和其他答案给出的Git签出@{-1}解决方案的部分的指针:

当为任何命令指定Git修订时,@{-<n>},例如@{-1}表示“在当前分支/提交之前检出的第n个分支/提交”。git checkout <branch>的文档重申:“您可以使用@{-N}语法引用使用git checkout操作签出的第n个分支/提交。” 对于git签出的<branch>参数,“您还可以指定' - ',这与' @{-1}'是同义词。”

其他回答

我带着同样的想法来到了这个问题,去结账我的前一个分支。我在Mac中使用ohmyz。下面的命令帮助了我。

$ gco -
$ git checkout -

只是在前面的回答中添加了一些细节,以理解git checkout @{-N}的工作机制。它会遍历reflog来检查签出历史,所以如果你想自己实现类似的东西,你应该能够解析git reflog的输出,寻找签出:行。你可以在git源代码sha1_name.c中检查实现,特别是interpret_nth_prior_checkout函数。

在我的情况下,我已经从master切换到gh-pages,这导致我所有的组件都消失了,取而代之的是一个文件名“static”和其他。

Git checkout -m master帮助

现在最简单的方法是:

git checkout -

…这是一个别名:

git checkout @{-1}

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

以下是Git文档中描述Git签出-和其他答案给出的Git签出@{-1}解决方案的部分的指针:

当为任何命令指定Git修订时,@{-<n>},例如@{-1}表示“在当前分支/提交之前检出的第n个分支/提交”。git checkout <branch>的文档重申:“您可以使用@{-N}语法引用使用git checkout操作签出的第n个分支/提交。” 对于git签出的<branch>参数,“您还可以指定' - ',这与' @{-1}'是同义词。”