4

我在 Windows 上使用 git(实际上是 msysgit)1.6.4。大多数时候我都在一些功能分支上工作。时不时地,我想跳回 master 来挑选我在我的特性分支中所做的一个特定提交——通常是因为它是一个有用的错误修复,即使没有这个特性也是有意义的。我的工作流程是这样的——如果这太复杂了,请告诉我:-):

git checkout -b mycoolfeaturebranch
// 破解,实现一个功能和一个错误修复(当我在它的时候)

git add file_with_bugfix.cpp
git commit -m "Fixed bug 12345 // 提交错误修复
git checkout master // 跳转到 master
git cherry-pick // 将 bugfix 带入 master

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

是否有类似cd -Unix shell 的东西(跳转到上一个目录,对于在两个目录之间切换很有用)?Agit checkout -会很棒。:-)

4

2 回答 2

4

尝试:

 git checkout @{-1}

git rev-parse

特殊构造@{-<n>}表示在当前分支之前签出的第 th 分支。


正如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>}

一个 ref 后跟后缀 @ 并带有一个包含在大括号对(例如{1}, {15})中的序号规范,以指定该 ref 的第 n 个先前值。
例如master@{1} ,是 master 的直接先验值,而是 mastermaster@{5}的第 5 个先验值。
此后缀只能紧跟在 ref 名称之后使用,并且 ref 必须具有现有日志 ($GIT_DIR/logs/)。

您可以使用@带有空 ref 部分的构造来获取当前分支的 reflog。
例如,如果您在分支上blabla,则@{1}表示与 相同blabla@{1}

)

于 2009-10-21T10:41:11.840 回答
4

来自 $GIT/Documentation/RelNotes-1.6.2.txt:

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

你试过了吗?

于 2009-10-21T10:51:12.003 回答