在 Git 合并冲突中,如何保留正在合并的版本?

12
我在本地机器上有两个git分支 - 一个叫做“v2”的分支和一个叫做“master”的分支。我正在将“v2”分支合并到处于检出状态且为head分支的“master”分支中。
我想将“v2”分支合并到“master”分支中。当我执行合并操作时,会有许多冲突需要逐个解决。
对于每个冲突,我该如何保留“v2”分支文件而不是文件的“master”分支版本?
Git Tower针对这些类型的冲突向我呈现的选项包括:
- 将FILENAME标记为手动解决 - 通过保留FILENAME来解决 - 通过删除FILENAME来解决 - 恢复FILENAME的他们的版本 - 在外部应用程序中打开
据我所知,“保留”文件的选项意味着保留“v2”版本(即要合并的版本),而“删除”文件的选项则意味着不添加“v2”版本(而是保留现有的“master”版本)。然而,当我使用了删除选项时,它实际上从存储库中将该文件删除了。 对于这些类型的冲突,我该如何保留“v2”分支文件而不是文件的“master”分支版本?

dup:https://dev59.com/questions/t3I-5IYBdhLWcg3wf4dD - jchapa
我特别询问与Git Tower客户端相关的问题,因此您提供的链接并没有回答我的问题。 - Tim Jahn
好的,抱歉,我刚才是针对Git总体提供答案。 - jchapa
1
如果您特别询问 Git Tower,您应该在问题中明确说明。 - ebneter
我建议看一下Atlassian的SourceTree。它是Mac上比Tower更强大的GUI git客户端。而且它是免费的。 - dbainbridge
2个回答

19
即使您正在使用 Git Tower,您也可以转到命令行并使用。

即使您正在使用 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之类的东西,并选择“外部工具”,正如您的问题中提到的那样。在那里,您将有选择“theirs”一侧的选项。


在 Git Tower 中,在查看合并冲突时没有选项可以检出单个文件... - Tim Jahn
1
只需转到命令行即可完成。无论使用什么工具,Git的状态都是相同的。我的建议是从命令行使用git。您将获得许多好处:可编写脚本、管道、制表符自动完成、会话历史记录等。 - Adam Dymitruk
不幸的是,那并没有回答我的问题。我之所以使用 Git Tower 是有原因的,而且我在特别询问如何在这个应用程序中进行操作。 - Tim Jahn
1
我认为没有通过 Tower 完成它的方法。正在更新答案。 - Adam Dymitruk
如果你坚持使用Git Tower,而且只用Git Tower,或许你应该询问fournova的技术支持人员如何操作。 - ebneter

7

如果你想让 v2 版本保持不变(我希望 master 分支看起来与 v2 完全相同),我认为最简单的方法是:

  • 检出你想要合并的分支
  • 使用 ours 策略将 master 分支合并到该分支上
  • 检出 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目前还没有公开的方法来做到这一点。 :-(


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