有没有一种简单的方法可以切换回之前活跃的分支?

4
我正在Windows上使用git(实际上是msysgit)1.6.4。大多数时间我都在某些功能分支上工作。偶尔,我想要跳回主分支,挑选我在功能分支中完成的特定提交 - 通常是因为它是一个有用的错误修复,即使没有该功能也有意义。我的工作流程如下 - 如果这样做太复杂,请告诉我 :-):
git checkout -b mycoolfeaturebranch // 开始工作,实现一个新功能和一个错误修复
git add file_with_bugfix.cpp git commit -m "Fixed bug 12345" // 提交错误修复 git checkout master // 切换到主分支 git cherry-pick // 将错误修复带到主分支
此时,我通常想要返回到我的功能分支继续工作。不幸的是,我的分支名称往往变得有点长(比如'mycoolfeaturebranch'),而且我在Windows上没有git分支名称tab自动补全。
是否有类似于Unix shell上的“cd -”(跳转到上一个目录,对于在两个目录之间切换非常有用)的东西?类似于“git checkout -”就好了。 :-)
2个回答

4

尝试:

 git checkout @{-1}

来自 git rev-parse

特殊结构 @{-<n>} 表示当前分支之前检出的第 n 个分支。


正如Stefan Näwe他的回答中提到的:

"git checkout -"是"git checkout @{-1}"的速记方式。

虽然语法@{-1}已经存在了1.6.2,但直到1.6.2才完全有效,正如Junio C. Hamano在2009年2月的评论中所强调的(重点在于我):

@{-1}语法是在你开始变得过于活跃之前就已经添加了,但它将出现在1.6.2中,并且被宣传为“可用于您可以使用分支名称的任何地方”,但实际上并非如此。

我一直在修复各个地方以使其符合实际情况。
现在我正在让"git merge @{-1}"起作用。


注:这与@{<n>}不同

一个带有序数规范的后缀@和括号包围的引用(例如{1}{15}),用于指定该引用的第n个先前值。
例如master@{1}是master的直接上一个值,而master@{5}是master的第5个先前值。
此后缀仅可紧随引用名称之后使用,并且该引用必须具有现有日志($GIT_DIR/logs/)。

您可以使用空引用部分的@结构来访问当前分支的reflog。
例如,如果您在分支blabla上,则@{1}blabla@{1}相同。

)


太好了!运作良好——不过敲@{-1}有点烦人。目前,我创建了一个别名叫做“git cc”,它执行“git checkout @{-1}”。或者,也许可以将“git checkout -”设为“git checkout @{-1}”的别名吗? - Frerich Raabe
git checkout - 的功能等同于 git checkout @{-1}@{-1} 是更一般化的 @{-n} 特例,即表示第 n 个最近检出的分支。 - Jakub Narębski

4

从$GIT/Documentation/RelNotes-1.6.2.txt中:

  • "git checkout -"是"git checkout @{-1}"的简写。

你试过了吗?


啊!我之前用的是一些较旧的git版本,但自从我升级到git 1.6.4后就没有再尝试过。哎呀!感谢你指出这个问题! - Frerich Raabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接