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



我在分支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并配置了我的配置文件,当我试图使用合并工具时,我得到:

$ git mergetool kdiff3
No files need merging

我运行diff,它输出如下:

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 .

我有这个问题,即使只是运行正确的命令:

$ git mergetool

这可能与打开了rerere有关(参见此链接[编辑:链接不再工作])

我通过在.gitconfig中创建两个别名来解决这个问题,这将为每个冲突的文件启动mergetool:

将此添加到.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

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

$ git mergetool

$ git mergetool --tool=kdiff3

如果你被git命令困住了,你可以随时查看手册(git mergetool --help)。

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

相关内容

  • 没有找到相关文章

最新更新