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告诉我我合并冲突,但也告诉我没有文件需要合并的主要内容,如果未能解决你的问题,请参考以下文章