Mat*_*ggs 631 git git-checkout
我想要相当于cd -git.如果我在分支机构master并且我结账foo,我希望能够输入类似于git checkout -返回的内容master,并且能够再次键入它以返回foo.
有这样的事吗?难以实施吗?
Kar*_*ldt 1089
@{-1}是一种引用您所在的最后一个分支的方法.这
不仅在期望对象名称的地方被接受,而且在期望分支名称的任何地方都被接受,并且就像您键入分支名称一样.
例如git branch --track mybranch @{-1},git merge @{-1}并且
git rev-parse --symbolic-full-name @{-1}将按预期工作.
和
git checkout -是一个简写git checkout @{-1}.
mar*_*cgg 181
现在最简单的方法是:
git checkout -
Run Code Online (Sandbox Code Playgroud)
...这是别名:
git checkout @{-1}
Run Code Online (Sandbox Code Playgroud)
如果你想了解更多这方面的信息,我在这里写了一篇关于它的文章:在Git中查看以前的分支.
man*_*lds 28
正如@Karl所指出的那样git checkout:
作为一种特殊情况,第N个最后一个分支的"@ { - N}"语法检查分支(而不是分离).您也可以指定 - 这与"@ { - 1}"同义.
因此,无论git checkout -并且git checkout @{-1}在这种情况下会工作
最近我相信是使用git reflog和解析最新的moving from branch1 to branch2和git checkout branch1
小智 11
只需在前面的答案中添加更多细节,以了解其git checkout @{-N}工作机制.它遍历reflog以检查结帐历史,因此如果您想要自己实现类似的东西,您应该能够解析git reflog查找checkout:行的输出.您可以检查git源中的实现sha1_name.c,特别是函数interpret_nth_prior_checkout.
我带着同样的想法登陆了这个问题,以查看我以前的分支。我使用ohmyz在Mac。下面的命令帮助了我。
$ gco -
$ git checkout -
Run Code Online (Sandbox Code Playgroud)