2013-02-14 100 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