2013-02-14 95 views
2

在git中,什麼是最好的/最簡單的方式來使部署分支最新與主,當分支已經包含櫻桃挑選提交從主,假設你想保留部署分支的歷史記錄。Git:同步分支,包含以前櫻桃採摘的提交與主

的情況:在過去的一段時間,關老爺的做

  1. 部署分支。
  2. 額外的提交櫻桃採摘從主要部署,忽略了一些其他提交。
  3. 部署代碼部署到生產環境。
  4. 現在,部署需要與主服務器完全同步,以便下次部署。

的問題是,如何做到第4步輕鬆(避免任何合併衝突,因爲沒有獨特一直致力於部署,只櫻桃採摘的變化),而在部署改變任何歷史記錄(我的理解是,做一個此時可能會失去部署中的歷史記錄,或者使獲取部署的確切代碼更加困難,但我很可能錯誤地認爲這是錯誤的)。

執行git merge master會產生很多衝突,因爲所需要的僅僅是部署的頭部直接類似於主控部署(部署不包含任何獨特的更改),所以很容易避免。

回答

2

用我能找到的最好的方法回答我自己的問題,直到目前爲止。下面的命令將合併掌握到你的分支,而解決有利於主人的所有衝突(從分支的結賬運行):

git merge -s recursive -X theirs origin/master 
+0

我自己做了這件事,現在我很困惑,爲什麼從'origin/master'合併時得到不同的結果,而不是'master'(它是最新的,即拉出之後)。在第二種情況下,我缺少2個代碼片段。按照您的建議使用'origin/master'工作沒有問題,併產生預期的結果。 – rnsanchez 2013-06-27 16:14:34

+0

想通了:我遇到了合併不匹配。使用'--no-commit',我可以解決那些需要關注的衝突,其他所有事情都按照預期合併。 – rnsanchez 2013-06-28 02:19:13

2

根據我的經驗,只要合併應該可以正常工作。 Git檢測到櫻桃挑選的提交已經應用,並在合併期間「忽略」它們。你嘗試合併嗎?即使它失敗了,你也可以用git輕鬆地恢復,並嘗試一些不同的東西(也許是另一種合併策略,但我還沒有經驗)。

如果您想重新綁定並仍然有部署的代碼,只需在要保留的代碼中添加一個標記即可。 rebase會重寫提交的歷史記錄,但標記仍會指向rebase之前的代碼(提交)。

+0

您對合並註釋是一個很好的建議,但不幸的是造成了一些衝突。爲了清楚起見,我更新了我的問題以表明這一點。 – 2013-02-14 18:39:54

1

我不認爲這是你期望的答案,但它可能應該細化你的分支策略一點,並更加細化主題分支。這樣你就可以合併主題分支,而不是從主人挑選櫻桃。因此,您的主分支會合並所有主題分支,並且開發分支會合並一些主題分支。然後,您最終將開發主合併到最新的部署分支。這不是保證你避免衝突,但它更清潔,在規範的情況下,衝突會減少,你需要解決。

當你選櫻桃時,git失去了認識到櫻桃採摘的提交和櫻桃醬原汁是相同的能力。這是衝突的來源。

+0

我同意這樣做更爲理想,但有時候情況會發生變化,並且功能會被拆分,或者需要拉入部分版本。這不是常見的情況,但不幸的是,它已經發生,因此是一個問題。 – 2013-02-15 17:04:55