2013-09-24 183 views
2

我有一個小小的項目,用Git維護它的版本控制。 這裏的術語版本控制指的是你可以想象到的最簡單的形式: 只在主分支上並且在一天結束時產生提交,將所有提交推送到遠程。 目前爲止這麼好。只需要一個主分支就足夠了,因爲應用程序的最新狀態一直都是需要的。如何使用git發佈版本控制版本

然後,採購員告訴我他們需要v1.1和v1.2。問題是最新的主提交包含v1.1的所有內容,以及v1.2的一些撤消內容。

我的第一意圖是找到兩個'功能包'分歧的基礎提交。 我從那個提交創建了兩個分支,我開始逐個挑選基礎上的提交。幸運的是,其中並沒有太多。 這導致兩個分支(V1.1和V1.2)保持在適當的合適的東西,除了我,因爲在1.1版的功能還需要在V1.2變基V1.2到V1.1

這一切後,我有以下病史:

enter image description here

正如你所看到的,我有一個「懸」分支,它是主,其實,我並不需要這些提交,因爲所有的他們被挑選到正確的地方。

問題簡單的是:如何優雅地處理這種情況(基本上除去那些不必要的提交)而不會造成任何傷害,或者有沒有其他辦法可以達到同樣的效果?

+2

Mercurial VCS項目使用一個單獨的'stable'分支,其中用於下一發行版本的所有提交都合併到該分支中。任何旨在用於發佈版本的修補程序都將被提交給該「穩定」分支,並最終被合併到主幹(或「默認」分支)中。所有新的,可能是後向不兼容的變化都被轉移到主幹上。 (請注意:我*不*建議使用汞;我通知用戶部分他們的工作流程如何。) – Isxek

回答

1

今年在ThatConference上有一個非常好的演講(幻燈片可在鏈接中):http://www.thatconference.com/sessions/speaker_188主持人有這個問題,並描述了她如何用git解決它。

基本上,你真的不應該在你描述的工作流中工作以達到你想要的。更好的方法是讓存儲庫中的每個分支代表單個功能。然後,您將這些功能綁定到主合併分支或合併分支的合併提交中,並使用您的版本號對其進行標記。由於這聽起來毫無幫助(顯然你已經用你當前的工作流程創建了你的歷史記錄),它可能對未來有用。

1

我認爲,最好的解決方案,我希望我已經unterstand它正確是git rebase

以下是關於rebase分支的一些信息。

另一個很酷的解決方案來獲得工作流程,你應該看看gitflow

+0

+1 for gitflow。但您忘記鏈接主要文章:http://nvie.com/posts/a-successful-git-branching-model/ – eckes

0

這聽起來像你看到這不是一個理想的情況下。不用擔心,但解決方案很簡單。

如果能夠拿出一把斧頭,然後開始砍掉主控器上的大量不同提交,然後將您的工作重新合併到主控中,那將是非常好的。不幸的是,我懷疑這對任何同事都會很好,因爲當他們嘗試將他們的更改合併到主分支時,這會導致衝突(可能甚至是字面上的衝突)。因此,不要重寫歷史記錄,最好是製作新提交

  1. 首先通過運行git checkout master移動到主分支。
  2. 然後,從您項目的根目錄運行git checkout -f <commit> .,其中<commit>表示提交的SHA哈希值,其中消息「測量列表單元格渲染器中的活動pst顏色已更改」(例如類似於:7cd052c)。注意最後一點,它表示從指定的提交中檢出當前目錄的版本。
  3. 最後一步改變了工作目錄中的文件,以反映它們在共同祖先發生分歧的地方所處的狀態。現在,讓我們通過git commit -a來承諾。
  4. 此時,您應該可以無任何衝突地合併回主人:git merge v12

從現在開始,您可以合併您對主分支所做的任何其他更改!