2012-02-24 210 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

相关问题