2009-10-21 29 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

相關問題