我有点想要相当于cd -
for git。如果我在分支中master
并且我结帐foo
,我希望能够输入类似于git checkout -
go back to 的master
内容,并且能够再次输入它以返回foo
。
这样的事情存在吗?实施起来会不会很困难?
我有点想要相当于cd -
for git。如果我在分支中master
并且我结帐foo
,我希望能够输入类似于git checkout -
go back to 的master
内容,并且能够再次输入它以返回foo
。
这样的事情存在吗?实施起来会不会很困难?
@{-1}
是一种引用您所在的最后一个分支的方法。这
不仅在需要对象名称的地方被接受,而且在需要分支名称的任何地方都被接受,并且就像您键入了分支名称一样。
例如git branch --track mybranch @{-1}
,git merge @{-1}
和
git rev-parse --symbolic-full-name @{-1}
会按预期工作。
和
git checkout -
是 的简写git checkout @{-1}
。
现在最简单的方法是:
git checkout -
...这是以下的别名:
git checkout @{-1}
如果你想了解更多,我在这里写了一篇完整的文章:Checkout The Previous Branch In Git。
正如@Karl 指出和git checkout
手册:
作为一种特殊情况,第 N 个最后一个分支的“@{-N}”语法检出分支(而不是分离)。您也可以指定 - 与“@{-1}”同义。
所以两者都git checkout -
可以git checkout @{-1}
在这种情况下工作
我认为最接近的是使用git reflog
并解析最新的moving from branch1 to branch2
和git checkout branch1
Git 版本2.23
引入了git switch
您可以用来执行此操作的命令(以及更多)。引用官方文档:
切换到指定分支。更新工作树和索引以匹配分支。所有新的提交都会被添加到这个分支的顶端。
在您的特定情况下,您可以发出git switch -
回到您之前所在的分支。您可以再次执行相同的命令以返回第一个分支。
PS 这并不是说你还不知道如何去做(我的意思是你问这个问题已经 7 年了),但是这个命令对初学者来说不那么混乱和友好,因为它解决了使用git checkout
.
我带着同样的想法来到了这个问题,以检查我以前的分支。我在Mac
. _ 下面的命令帮助了我。
$ gco -
$ git checkout -
只需在前面的答案中添加更多细节,以了解其git checkout @{-N}
工作机制。它遍历 reflog 以检查结帐历史记录,因此如果您想自己实现类似的东西,您应该能够解析git reflog
查找checkout:
行的输出。您可以检查 git 源中的实现sha1_name.c
,特别是功能interpret_nth_prior_checkout
。
最流行的解决方案是:
git checkout @{-N}
其中 N - 退回结帐历史记录的分支的步数。
以下是 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>