12

我的机器上有两个本地 git 分支——一个名为“v2”的分支和一个名为“master”的分支。我正在将 v2 合并到 master 中,同时签出 master 和 head 分支。

我想将“v2”分支合并到“master”分支中。当我执行合并时,我必须一一解决许多冲突。

对于每个冲突,我如何保留“v2”分支文件而不是文件的“主”分支版本?

Git Tower 针对这些类型的冲突提供给我的选项是:

  • 将 FILENAME 标记为手动解析
  • 通过保留 FILENAME 来解决
  • 通过删除文件名解决
  • 恢复他们的 FILENAME 版本
  • 在外部应用程序中打开

据我了解,“保留”文件的选项意味着保留“v2”版本(被合并的那个),“删除”文件意味着不添加“v2”版本(而是保留现有的“主”版本)。但是,当我使用删除选项时,它实际上从存储库中完全删除了该文件。

对于这些类型的冲突,如何保留“v2”分支文件而不是文件的“主”分支版本?

4

2 回答 2

20

即使您使用的是 Git Tower,您也可以下拉到命令行并使用

git checkout --theirs file.txt

这里有一些关于它的文档:

http://gitready.com/advanced/2009/02/25/keep-either-file-in-merge-conflicts.html

如果您只想使用 git tower,请按原样完成合并,然后签出该文件的另一个分支的版本。现在暂存并提交修改- 如果可能的话。

Git 已被开发为一个命令行工具。对于我曾经使用过的所有其他工具,我总是在功能上存在差距。我选择拥抱而不是反对 Git 的设计。

此外,您可以连接 Beyond Compare 之类的东西,然后选择问题中提到的“外部工具”。在那里,您可以选择“他们”的一方。

于 2012-12-14T19:59:41.100 回答
7

如果您希望保留 v2(我希望 master 看起来与 v2 完全一样),我认为最简单的方法是:

  • 签出要合并的分支
  • ours使用策略将master合并到分支中
  • 结帐大师
  • 合并分支

它看起来像这样:

git checkout v2
git merge -s ours master
git checkout master
git merge v2

如果您只希望这种类型的解决方案仅发生在冲突中,那么您可以执行以下操作:

git checkout master
git merge -s recursive -Xtheirs v2

您可以在此处阅读 git 文档中的合并策略。

更新:不幸的是,我认为 Git Tower 还没有公开这样做的方法。:-(

于 2012-12-15T09:00:38.813 回答