2012-02-24 112 views
31

我有一個開發分支和生產分支的項目。最近我一直在開發一套全新的功能,所以我在兩週內沒有合併到產品中。但與此同時,還有一些需要在生產中修復的缺陷。在git中強制合併的最佳方式是什麼?

對於大多數情況下,我能夠在dev中進行修復並將其選入生產環境。然而,有時候,我需要手動修復生產,因爲兩個分公司的修復方案差別很大。值得注意的是,這兩個分支自分裂以來已經分化了一點點。

現在我想把所有的dev都投入到生產中。我不在乎在分割之後保留任何生產提交,我只想讓生產看起來完全像dev。 [編輯:我希望生產看起來完全像dev ,因爲拆分,但不想在拆分之前重寫歷史記錄]但是,當我嘗試合併時,我得到許多衝突,我不想修復手。

在git中強制合併的最佳方式是什麼?我可以將生產更改恢復到拆分,然後快速轉發到開發分支嗎?

回答

26

你只需把你的De​​v分支到主回購分公司生產:

git push --force upstream-remote dev:production 

upstream-remote可能只是origin,如果你使用的是默認的克隆。

更新了mod'ed問題:

你可能不想revert在git的感覺,但,是的,這或多或少你想要做什麼。像

git checkout -b merge <split hash> 
git merge dev 
git push --force origin merge:production 

<分裂哈希>東西是最後一次提交上要保證生產。

+0

嗯,其實我覺得當我說我想我說錯「生產外觀酷似開發。」我的意思是,我希望分支看起來像dev *,因爲split *。也就是說,我希望自從拆分應用於生產以來,不需要關心生產提交就可以擁有所有的開發提交。但是,我不想在拆分之前重寫歷史記錄,這聽起來像是您的解決方案。 – 2012-02-24 17:19:58

+1

這兩個分支在拆分時是一樣的嗎?這聽起來像。如果是這樣,他們在分裂之前有相同的歷史,所以你不會失去任何東西。 – smparkes 2012-02-24 17:24:41

+0

分支歷史不一樣。我想我一直在說錯話。兩週前,這些文件完全相同,我剛剛從開發中整合到了生產中。之後,他們開始分歧 - 這就是我所說的分裂。但是這兩個分支的歷史是不同的。 – 2012-02-24 17:27:23

-4

這將合併您newBranch在現有的主分支

git checkout <baseBranch> // checkout baseBranch 
git merge -s ours <newBranch> // this will simply merge newBranch in baseBranch 
git rm -rf . 
git checkout newBranch -- . 
+0

讀者應該注意'-s我們'將覆蓋現有的工作,而'-X我們'將允許non-相互衝突的差異合併。''我們的''將使一個分支與另一個分支具有相同的狀態,而'-X我們'不會簡單地破壞分支。我不是在糾正提出的答案,而是指出了一個重要的細節。 – haleonj 2015-11-17 14:46:05

相關問題