如何在git中使用覆盖选项将一个分支合并到另一个分支

3
我正在使用Git,有两个分支:production和master。此时,production已经有9个月了,许多更改已经进入了主分支。
我使用Capistrano,所以我需要将所有更改推送到生产分支,以便我可以部署。然而,当我合并时,会出现大量合并冲突。我不关心合并问题,因为我希望我的生产分支被主分支覆盖。有什么方法可以做到这一点吗?
如果没有,我想创建一个名为production_old的生产分支。然后删除生产分支中的所有内容,再从主分支合并。
我正在使用GitHub。

可能是git merge -s ours, what about "theirs"的重复问题。 - user456814
2个回答

1

也许 ours 合并策略是您正在寻找的。

ours 这将解决任意数量的头,但合并的结果树始终是当前分支头的树,有效地忽略了所有其他分支的更改。它旨在用于取代旧的侧分支开发历史。

更多信息... http://www.kernel.org/pub/software/scm/git/docs/git-merge.html


实际上,如果Roger试图将生产合并到主分支,则会使用ours,因为ours认为要合并的分支已经过时。在Roger的情况下,他希望选中的分支被视为已过时,以支持要合并的分支。 - jamessan

1

注意:我没有使用过Github的经验。话虽如此...

我认为你并不想在这里进行合并。如果我理解正确,你有一个反映了已部署内容的分支(production),还有一个包括已部署内容以及更新更改的分支(master),但现在你准备将master中的更改推广为新的production内容。

在这种情况下,我认为你的最后建议接近你想要做的事情,尽管你不需要玩删除现有生产分支内部的内容。我会:

  1. 标记当前的production分支,以便你不会失去它的轨迹。
  2. production分支移动到指向master的头部。

我相信你可以通过运行git branch -f production master来完成步骤#2,这将使用master作为起点创建一个新的production分支。因为production已经存在,所以你需要-f标志来强制创建它。这也等同于运行git checkout production,然后运行git reset --hard master来强制使分支的头与master匹配。

同样,在执行任何操作之前,我建议你确保标记原始production分支的头部,既是为了记录,也是为了在第一次操作不正确时有一个安全网。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接