2010-08-05 46 views
9

來自svn背景:由於(缺少)切換速度以及將分支合併回樹幹的小時數或更多時間,我幾乎從不分支。有時候,如果我需要在網站上修補一個問題,我會在後備箱中進行更改(這將與先前的更改或新功能一起),然後轉到該文件,然後執行「svn up path/to /文件名「,它只會更新該文件,解決問題,但會節省剩餘的文件。從概念上講,這似乎不可能在git(或必要);它是否允許櫻桃採摘的結構化分段和分組提交?因此,我可能會更改網站的特定區域,並將其作爲一組進行提交,而不是如何處理svn,並且執行一天的工作並觸及整個提交整個批次的文件?瞭解git cherry-pick

回答

10

在這種情況下,您可能想要做的是爲您的修補程序創建一個新的分支,從所有需要該修補程序的分支的共同祖先分支出來。例如,假設你有一對夫婦保持的版本與您當前的發展一起:

- X - o - o - o - o - o - o - o - o - o (master) 
    \      \ 
    o - o - o (release A) o - o (release B) 

如果您需要將適用於這兩個版本的修補程序的,創建一個分支從呈交標爲X.開始提交你的修正,然後將該分支合併到所有三個分支中。

你可以挑選櫻桃,但這裏有一個很好的關於何時挑選櫻桃的經驗法則:不。唯一一個你想挑選櫻桃的案例就是你嚴格管理你的分支機構。在這種情況下,這可能意味着您對主服務器進行了修復,而不是將其從較早的時間點正確地分支出去,而且人們已將更新提交給主服務器,因此您無法更改它。你必須選擇在兩個發佈分支上進行選擇。但是,當然,你應該首先正確地管理你的分支機構,而且你永遠不需要挑選。 (是的,它有時候還會發生;這就是生活。)

+0

太棒了。我只是玩過一些「git branch foo old-merge-sha1」的東西,這真是太棒了。 – Hans 2010-08-06 03:32:06

+0

爲「FeatureA」創建分支關閉主體,然後再爲主題分支「FeatureA」,最好的做法是在主體準備好時將它們合併到FeatureA中,但在整個FeatureA準備就緒之前不會觸摸主體,是否將FeatureA合併爲主?現在(在svn中)如果我正在處理需要幾周時間並需要修補程序的事情,那麼我會按照我的問題(svn up path/to/filename)中描述的方式進行操作,然後繼續。 Git分支似乎是一個「經常合併」的建議,但是如果我不想* master/trunk在準備好之前觸摸,那麼我可以自由更新網站。 – Hans 2010-08-06 03:41:31

+2

@Hans:直到合併時才合併。通常master是一個當前穩定的分支,所以如果你願意,你可以移動一個部分但穩定的特性,但是一般來說,你應該只合並完整的東西。而且很可能有幾個不同風格的穩定分支 - 一個用於給定的relase(用於您的網站),一個用於當前的穩定測試,一個用於不穩定的測試......只是確保總是以正確的方向合併(topic - >功能 - >主控或不穩定 - >穩定)。 – Cascabel 2010-08-06 03:58:07