【问题标题】:Git: Open merge tool without conflictGit:打开没有冲突的合并工具
【发布时间】:2017-04-28 05:14:12
【问题描述】:

我在合并时遇到问题,但 git 没有将文件标记为冲突。 当我尝试使用git mergetool 打开文件时,git 只会说:No files need merging

如何以三种方式比较打开文件而不发生合并冲突?

【问题讨论】:

  • 你能详细说明你的合并问题吗?

标签: git git-merge merge-conflict-resolution


【解决方案1】:

您可以执行以下操作:

git merge --no-commit topic
git checkout --merge that_file
git mergetool that_file
git commit

也就是说,你避免成功的合并创建一个提交,然后你假装that_file有冲突,那么你可以用git mergetool处理文件。最后,提交结果。

【讨论】:

  • 有没有办法做到这一点,而不需要git checkout 破坏对文件所做的更改?例如。在合并期间,我想再次打开一个 3 面板差异来帮助修复构建错误。
  • @jozxyqk 我不知道。您必须从索引中手动提取基本和远程版本,当工作树版本必须保持不变时,这是一个 PITA。请参阅 ThorSummoner 的回答,看看需要什么。在构建成功之前不要关闭合并工具,这样会更好。
【解决方案2】:

遗憾的是,我无法重现 @Filp Stefanov 的成功,所以我手工费力地完成了

(来自存储库根目录)

git merge --no-ff --no-commit <topic>
git show HEAD:<file> > <file>.ours
git show MERGE_HEAD:<file> > <file>.theirs
$(git config merge.tool) <file>.ours <file> <file>.theirs
rm <file>.ours <file>.theirs
git add <file>
git commit

大声说出来,

  1. 将我们的文件版本显示到标准输出并将其保存在某处
  2. 将他们的文件显示到标准输出并将其保存在某处
  3. 打开我们的、当前的、他们的合并工具
  4. 进行合并
  5. 删除 .ours/.theirs 文件
  6. 添加并提交合并文件

如果这基本上是 git 原生的功能,我不会感到惊讶

【讨论】:

    【解决方案3】:

    git mergetool 使用 .gitconfig [merge] 部分中指定的工具
    git mergetool --tool-help

    查看此topic

    将其中之一配置为 git diff 工具
    例如:

    git config --global diff.tool kdiff3
    

    但据我所知,git diff 只能做 2-way diff。
    解决方案是检查 3 个不同的目录并运行 kdiff3

    【讨论】:

    • 再次:如何以三种方式比较打开文件而不发生合并冲突?您是否希望我将文件的所有四个版本从不同的提交复制到文件系统中的某个位置并使用合并工具手动打开它们?
    猜你喜欢
    • 2012-04-19
    • 2011-12-16
    • 2022-12-18
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多