2009-10-21 25 views
4

我在Windows上使用git(实际上,msysgit)1.6.4。大部分时间我都在某些功能分支上工作。偶尔,我想跳回到主人面前挑选我在功能分支中做的一个特定提交 - 通常是因为它是一种有用的错误修正,即使没有该功能也是有意义的。我的工作流程是这样的 - 如果这是过于复杂,请:-)告诉我:有没有简单的方法来改变以前活跃的分支?

 
git checkout -b mycoolfeaturebranch 
// hack away, implementing a feature and one bugfix (while I'm at it) 

git add file_with_bugfix.cpp 
git commit -m "Fixed bug 12345 // commit the bugfix 
git checkout master    // hop over to master 
git cherry-pick     // bring the bugfix into master 

在这一点上,我通常会想跳回到我的特性分支上继续该功能的工作。不幸的是,我的分支名称往往会变得有点长(比如,'mycoolfeaturebranch'),而我在Windows上没有git分支名称选项卡完成。

在Unix shell中可能有类似cd -的东西(跳到上一个目录,对于在两个目录间切换很有用)? A git checkout -会很棒。 :-)

回答

4

从$ GIT /文档/ relnotes的-1.6.2.txt:

  • “GIT中检出 - ” 是 “的git结帐@ { - 1}” 的简写。

你试过了吗?

+0

啊!我尝试了一些旧的git版本,但没有重试,因为我升级到git 1.6.4。 D'哦!感谢您指出了这一点! – 2009-10-21 10:56:14

4

尝试:

git checkout @{-1} 

git rev-parse

的特殊构造@{-<n>}指个分支当前的前检查出来。


his answer提及Stefan Näwe

git checkout -” 是 “git checkout @{-1}” 的简写。

即使语法@{-1}已经有1.6.2,它只是因为它1.6.2完全有效的,因为JUNIO C.滨野评论back in February 2009(重点煤矿):

的@ {-1}语法早在你开始变得活跃起来之前就已经增加了 这一轮,但它会在1.6.2和已被宣传为“可用 任何地方你可以使用分支名称”,但实际上它不是

我一直在修理各个地方,以配合现实与索赔。
我正在制作“git merge @{-1}”现在工作。


(注意:从@{<n>}

的Ref后跟后缀@与封闭在一对括号(一个序规范不同于例如{1}{15})以指定第n个例如
例如[email protected]{1}是主设备的即时优先值,而[email protected]{5}是主设备的第5个优先值。
此后缀可能为o只能在ref名称后立即使用,并且ref必须具有现有日志($ GIT_DIR/logs /)。

您可以使用@构造和一个空的参考零件来获取当前分支的reflog。
例如,如果您位于分支blabla,则@{1}的含义与[email protected]{1}相同。

+0

非常棒!效果很好 - 不幸的是,{ - 1}有点烦人。现在,我创建了一个名为'git cc'的别名,它执行'git checkout @ { - 1}'。或者,有没有办法让'git checkout'成为'git checkout @ { - 1}'的别名? – 2009-10-21 10:52:57

+0

'git checkout -'功能为'git checkout @ { - 1}'。 '@ { - 1}'是更通用的'@ { - n}'的特例,即第n个最后签出的分支。 – 2009-10-21 12:51:26

相关问题