git告诉我我合并冲突,但也告诉我没有文件需要合并

Posted

技术标签:

【中文标题】git告诉我我合并冲突,但也告诉我没有文件需要合并【英文标题】:git tells me that I Merge conflict, but also tells me that no files need merging 【发布时间】:2013-03-20 09:10:38 【问题描述】:

我在分支new 中提交了一些更改。

我结帐到master

当我尝试合并时:

$ git merge new
Auto-merging js/site.js
CONFLICT (content): Merge conflict in js/site.js
Automatic merge failed; fix conflicts and then commit the result.

所以我安装了 kdiff3 并配置了我的配置文件,当我尝试使用 mergetools 时,我得到了:

$ git mergetool kdiff3
No files need merging

我运行了一个差异,它输出了这个:

diff --cc js/site.js
index 8c17d62,7955b13..0000000
--- a/js/site.js
+++ b/js/site.js
@@@ -72,4 -81,18 +81,22 @@@ function doSmallScreen()

  $(document).ready(function () 
      calculateScreen();
- );
++<<<<<<< HEAD
++);
++=======
+     $(window).resize(function () 
+         delay(function () 
+             calculateScreen();
+         , 500);
+     );
+ );
+
+
+ var delay = (function () 
+     var timer = 0;
+     return function (callback, ms) 
+         clearTimeout(timer);
+         timer = setTimeout(callback, ms);
+     ;
 -)();
++)();
++>>>>>>> new

我对如何解决这个问题感到困惑,我想以最简单的方式解决这个问题,我真的不在乎我是否会丢失新分支的信息,但我想了解哪里出了问题以及为什么我无法使用合并工具。

我有一个合并冲突但没有文件需要合并,这对我来说似乎很奇怪。

【问题讨论】:

git mergetool reports "No files need merging"的可能重复 【参考方案1】:

即使只是运行正确的命令,我也遇到了这个问题:

$ git mergetool

这可能与打开 rerere 有关(请参阅此链接 [Ed.: 链接不再工作])

我通过在.gitconfig 中创建两个别名解决了这个问题,这为每个冲突文件启动了合并工具:

将此添加到您的 .gitconfig

# List conflicted files
list-conflicts = !git ls-files -u | cut -f 2 | sort -u

# Force mergetool to recognize conflicts
force-mergetool = !git list-conflicts | xargs git mergetool

tl;dr 应要求,以下是其作用的简要说明:

git ls-files -u:在尝试合并冲突后,这会列出所有未合并的文件,以及一些无关的信息和重复;如果在合并后立即运行,这基本上是所有有冲突的文件 | cut -f 2 删掉了这个输出的第二个字段,它本质上是文件路径 | sort -u 消除重复项 | xargs git mergetool 将此文件列表通过管道传输到 mergetool 命令中,该命令会启动您的 GUI 合并工具(假设您已经设置了一个)

因此,如果您只想查看列出的文件,则可以运行第一个命令。第二个命令会将所有这些通过管道传输到您的合并工具中(如果您愿意,可以使用 merge 而不是 mergetool)。

如果您想在添加别名之前自行尝试,您可以通过命令行运行以下两个命令之一:

git ls-files -u | cut -f 2 | sort -u

git ls-files -u | cut -f 2 | sort -u | xargs git mergetool

【讨论】:

是的!我想知道为什么没有投票,我们不能是唯一使用 rerere 的人! 你能解释更多这是做什么的吗?我遇到了这个问题,基本上根本无法合并我的文件...... @Chrisgozd,为答案添加了解释 为什么这么基本的东西会这么复杂?? @haelix 这是我想出办法的唯一方法。我建议先尝试@ThorSummoner 的答案,但我描述的方法是在所有情况下都适用于 m 的最简单方法。【参考方案2】:

我试过了

git mergetool .

似乎有效。

【讨论】:

@scorpiodawg 我认为这是可行的,因为它明确告诉 git 在所有需要合并的文件上打开合并工具(至少在当前目录下)【参考方案3】:

我认为您的 mergetool 命令是错误的。应该是

$ git mergetool

或者

$ git mergetool --tool=kdiff3

如果您遇到 git 命令时遇到问题,您可以随时查看手册 (git mergetool --help)。

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

【讨论】:

以上是关于git告诉我我合并冲突,但也告诉我没有文件需要合并的主要内容,如果未能解决你的问题,请参考以下文章

Git:合并期间的其他更改而没有冲突

为啥 git mergetool 显示没有冲突,即使合并后文件中存在冲突标记?

如何解决Git中的合并冲突

Git的操作理解

idea的git无法使用三路合并

idea解决代码冲突