3

在 git 中,假设您想保留部署分支的历史记录,当分支已经包含来自 master 的精选提交时,使部署分支与 master 保持最新的最佳/最简单的方法是什么。

场景:

  1. 部署分支在过去的某个时间由 master 创建。
  2. 额外的提交从 master 中挑选出来进行部署,省略了一些其他的提交。
  3. 部署代码部署到生产环境。
  4. 现在,deploy 需要与 master 完全同步以进行下一次部署。

问题是,如何轻松地执行第 4 步(避免任何合并冲突,因为没有提交任何独特的部署,只有精心挑选的更改)而不更改部署中的任何历史记录(我的理解是此时进行变基可能会失败部署中的历史记录,或者使获取已部署的确切代码变得更加困难,但我很可能在这方面弄错了)。

执行git merge master会产生许多冲突,最好避免这些冲突,因为所需要的只是部署负责人直接类似于 master 负责人(部署不包含任何独特的更改)。

4

3 回答 3

4

用迄今为止我能找到的最佳方法回答我自己的问题。以下命令会将 master 合并到您的分支中,同时解决所有有利于 master 的冲突(从您的分支结帐运行):

git merge -s recursive -X theirs origin/master
于 2013-03-12T20:11:03.840 回答
2

以我的经验,只是合并应该可以正常工作。Git 检测到已经应用了精心挑选的提交,并在合并期间“忽略”它们。您是否尝试合并?即使它失败了,您也可以使用 git 轻松恢复并尝试不同的方法(也许是另一种合并策略,但我还没有这方面的经验)。

如果你想变基并且仍然有部署的代码,只需在你想保留的代码中添加一个标签。变基将重写您的提交历史,但标签仍将指向变基之前的代码(提交)。

于 2013-02-14T18:34:17.313 回答
1

我认为这不是您所期望的答案,但您可能应该稍微完善您的分支策略,并在主题分支上更加细化。这样,您可以合并主题分支,而不是从 master 中挑选。因此,您的主分支合并了所有主题分支,而开发分支合并了一些主题分支。然后,您最终在开发中合并 master 以使部署分支保持最新。这并不能保证您会避免冲突,但它更简洁,并且在规范情况下,您需要解决的冲突更少。

当你挑选樱桃时,git 失去了识别樱桃挑选的提交和樱桃挑选的原始提交是相同的能力。这就是冲突的来源。

于 2013-02-14T19:26:28.350 回答