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

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


当前回答

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

Git checkout -m master帮助

其他回答

我带着同样的想法来到了这个问题,去结账我的前一个分支。我在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 @{-N}

其中N步计数的分支移动回签历史。

来自1.6.2版本的发布说明

@{-1}是一种指向您所在的最后一个分支的方法。这是 不仅在需要对象名的地方接受,而且在需要对象名的任何地方接受 分支名称,就像您输入了分支名称一样。 例如,git分支——跟踪mybranch @{-1}, git merge @{-1},和 Git rev-parse——symbolic-full-name @{-1}将正常工作。

and

Git签出-是Git签出@{-1}的简写。

要查看以前的结帐列表:

我= 0;而[$?-eq 0];我= $ ((i + 1));Echo -n "$i。”;Git rev-parse——symbol -full-name @{-$i} 2> /dev/null;完成 这个Bash一行脚本并不完美,但它应该适用于大多数情况。请注意,有时数字可能会跳过。 提示:您可以将它作为函数添加到.bashrc中。