我有点想要cd -
git 的等效项。如果我在分支机构master
并且结帐foo
,我希望能输入类似git checkout -
回去的文字master
,并能够再次输入它返回到foo
。
像这样的东西存在吗?实施起来会很难吗?
gc-
是git checkout -
我有点想要cd -
git 的等效项。如果我在分支机构master
并且结帐foo
,我希望能输入类似git checkout -
回去的文字master
,并能够再次输入它返回到foo
。
像这样的东西存在吗?实施起来会很难吗?
gc-
是git checkout -
Answers:
@{-1}
是一种引用您所在的最后一个分支的方法。
不仅在期望使用对象名称的地方,而且在期望使用分支名称的任何地方都可以接受,并且就像您键入分支名称一样。
例如git branch --track mybranch @{-1}
,git merge @{-1}
和
git rev-parse --symbolic-full-name @{-1}
将按预期工作。
和
git checkout -
是的简写git checkout @{-1}
。
error: pathspec '@-' did not match any file(s) known to git. error: pathspec '@1' did not match any file(s) known to git.
@{u}
,这是当前分支的上游分支。这对于例如git log @{u}..
列出哪些尚未提交的上游提交非常有用。相反git log ..@{u}
,这只是尚未推送的本地提交。
如今,最简单的方法是:
git checkout -
...是以下内容的别名:
git checkout @{-1}
如果您想了解更多信息,我在这里写了整篇文章:Checkout The Previous Branch In Git。
for i in{1..10}; do git rev-parse --symbolic-full-name @{-$i}; done
git reflog | ? { $_ -match ': checkout: moving from (.*) to (.*)'} | % { $Matches[1] }
。在bash中,您必须编写等效的内容(获取reflog并将其过滤为包含“:checkout:”字符串的行,然后提取分支名称)。这实际上就是git所做的
只需在前面的答案中添加更多细节,以了解其git checkout @{-N}
工作机理。它通过reflog来检查结帐历史,因此,如果您想自己实现类似的功能,则应该能够解析git reflog
寻找checkout:
行的输出。您可以检查git源中的实现sha1_name.c
,特别是功能interpret_nth_prior_checkout
。
以下是Git文档各部分的指针,这些文档描述了其他答案给出的git checkout -
和git checkout @{-1}
解决方案:
当为任何命令指定Git版本时@{-<n>}
,例如@{-1}
表示“第n个分支/提交在当前命令之前签出。” 该文档git checkout <branch>
重申:“您可以使用@{-N}
语法来引用使用git checkout
操作检出的第N个最后一个分支/提交。”
对于的<branch>
论点git checkout
,“您还可以指定与' -
'同义的' @{-1}
'。”