128

我正在为我的 git 项目使用(Windows)SourceTree。我可以在命令提示符或 Linux 终端中执行此操作。

但是,我想知道是否有一种以交互方式和视觉方式解决冲突的好方法。例如,如果 pull 检测到冲突,则弹出基于 GUI 的冲突工具(例如,P4Merge)。可能吗?

我总是在手动解决冲突,这很痛苦。

例如,这是pull一条来自 SourceTree 的 git 消息。

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit origin master
From W:\repo\
 * branch            master     -> FETCH_HEAD   

Updating 33c07bf..41e0249

error: Your local changes to the following files would be overwritten by merge:
    foo.cpp
    goo.cpp
    goo.hpp
Please, commit your changes or stash them before you can merge.
Aborting    

Completed with errors, see above.
4

3 回答 3

144

在 SourceTree 中,单击工具->选项。然后在“常规”选项卡上,确保选中该框以允许 SourceTree 修改您的 Git 配置文件。

然后切换到“差异”选项卡。在下半部分,使用下拉菜单选择要用于进行差异和合并的外部程序。我已经安装了KDiff3并且非常喜欢它。完成后,单击确定。

现在,当有合并时,您可以进入 Actions->Resolve Conflicts->Launch External Merge Tool。

于 2013-05-29T21:53:56.590 回答
11

我将 SourceTree 与 TortoiseMerge/Diff 一起使用,这是一个非常简单方便的 diff/merge 工具。

如果您也想使用它,那么:

  1. 获取 TortoiseMerge/Diff 的独立版本(相当旧,因为自 TortosieSVN 的 1.6.7 版以来,即自 2011 年 7 月以来,它不再独立发布)。此答案中的链接和详细信息。

  2. 解压缩TortoiseIDiff.exeTortoiseMerge.exe任何文件夹(c:\Program Files (x86)\Atlassian\SourceTree\extras\在我的情况下)。

  3. 在 SourceTree 中打开Tools > Options > Diff > External Diff / Merge. TortoiseMerge在两个下拉列表中选择。

  4. 点击OK并将 SourceTree 指向您的位置TortoiseIDiff.exeTortoiseMerge.exe

之后,您可以Resolve Conflicts > Launch External Merge Tool从本地存储库中每个冲突文件的上下文菜单中进行选择。这将打开 TortoiseMerge,您可以在其中轻松处理所有冲突。完成后,只需关闭 TortoiseMerge(您甚至不需要保存更改,这可能会自动完成),几秒钟后 SourceTree 应该会优雅地处理它。

唯一的问题是,即使未选中正确的选项,它也会自动创建备份副本。

于 2014-09-23T21:16:11.597 回答
5

当 Resolve Conflicts->Content Menu 被禁用时,一个可能在 Pending files 列表中。我们需要从下拉列表中选择冲突文件选项(顶部)

希望能帮助到你

于 2015-03-31T16:41:28.217 回答