git mergetool报告“;“无需合并文件”;

git mergetool报告“;“无需合并文件”;,git,git-merge,Git,Git Merge,出于某种原因,最近每次我拉合并冲突时,运行git mergetool报告“无需合并文件”: 如果我运行git-rebase--abort并再次拉取,或者相同的事情发生在不同的冲突上,或者拉取成功而没有合并冲突。这些拉力之间没有任何细微的变化,因此冲突似乎没有消失 以下是如何配置此分支和远程服务器: [branch "develop"] remote = origin merge = refs/heads/develop rebase = true

出于某种原因,最近每次我拉合并冲突时,运行
git mergetool
报告“无需合并文件”:

如果我运行git-rebase--abort并再次拉取,或者相同的事情发生在不同的冲突上,或者拉取成功而没有合并冲突。这些拉力之间没有任何细微的变化,因此冲突似乎没有消失

以下是如何配置此分支和远程服务器:

[branch "develop"]
        remote = origin
        merge = refs/heads/develop
        rebase = true
[remote "origin"]
        url = <my repo url>
        fetch = +refs/heads/*:refs/remotes/origin/*
[分支机构“开发”]
远程=原点
合并=引用/标题/展开
rebase=true
[远程“源”]
url=
fetch=+refs/heads/*:refs/remotes/origin/*

合并工具在解决冲突方面比库存git更好。不能太固执己见。例如,Beyond Compare具有语法意识,可以为您做很多事情。如果配置正确,就可以编译并运行解决方案进行测试。如果一切正常,那么只需
gitadd-A
gitrebase——继续
。你所经历的一切都是正常的。仔细检查您的“信任合并工具退出代码”设置:


注意:
git add
中的-A选项将进行所有更改,包括删除和新的未跟踪文件。

看起来我的问题与文件时间戳有关。感谢Mark Longair的建议,以下设置为我修复了它:

git config --global core.trustctime false
解决方案1:

$git config --global core.trustctime false
如果为false,则忽略索引和工作副本之间的ctime差异;当inode更改时间被Git之外的东西(文件系统爬虫和一些备份系统)定期修改时,这很有用。 默认情况下,core.trustctime为true

解决方案2: 只是:

您可以跳过它

琐碎的解决方案

这对我很有用:
Git在冲突文件所在的目录中创建了一些与合并相关的文件,因此请记住以正确的路径运行
Git mergetool

在我的例子中,问题是我打开了另一个控制台窗口,并且正在该窗口中运行应用程序(基于create-react-app,热加载)

终止进程并关闭另一个窗口,然后中止重基并重试对我来说很有效。

这为我修复了它:
git合并工具。



我发现此修复程序

是否必须首先运行“合并”?然后,如果要解决合并冲突,可以运行mergetool。但是,在不完全合并的结果被创建之前,我认为mergetool将简单地报告没有要合并的内容。

是的,我已将trustExitCode设置为true。听起来好像你在说,当我执行拉操作时,git使用配置好的合并工具(在我的例子中是diffmerge)来尝试非交互式合并,在这种情况下,合并是成功的。是这样吗?我一直将“未能在更改中合并”解释为我需要手动运行git mergetool。不,当您执行拉操作时,它只报告冲突。调用mergetool时,mergetool会自动修复冲突,并在修复冲突后返回命令行。您的下一步是现在测试您的解决方案,以再次检查工具是否出错。如果一切仍在运行,
git rebase--继续
。我认为这不对-如果您查看
git mergetool.sh
如果您收到错误消息“无需合并文件”,则根本不会调用合并工具。我想我们需要发问者提供更多的信息。我得去看看。谢谢。@AdamDymitruk我不能只是git rebase——现在继续。我得到“没有变化-你忘了使用‘git add’?”怎么办
git status
git ls files-u
报告?@MarkLongair让mecheck在我下一次拉动时进行检查。@MarkLongair我又遇到了这种情况。git状态报告:#在分支上开发#您的分支和“起源/开发”已发生分歧,#分别有5个和3个不同的提交无需提交(工作目录清理)git ls文件-u不报告任何内容。您使用的是什么版本的git?看起来好像您设置了
branch.autosetuprebase
branch..rebase
set,因为
git pull
导致了一个rebase-但是,在我的git版本中,如果您有本地更改,它将拒绝使用rebase进行拉取,因为您引用的错误消息表明您确实这样做了。@MarkLongair我使用的是1.7.7。正如您在上面所看到的,我在分支上将rebase设置为true。如果您有未提交的更改,git将拒绝使用rebase,但如果您有提交的更改,git将拒绝使用rebase——否则就没有任何可重新基址的内容。我的所有更改都已提交。我使用
autosetuprebase
已经有一段时间了,但直到最近才遇到这个问题。正常情况下,我会拉,如果有合并冲突,我总是可以运行
git mergetool
。确实,跳过是安全的,但是我必须考虑当前补丁是否可以在每次看到它时跳过。我宁愿完全避免错误。你是对的,Pickslay,避免错误是节能的选择:)如果某个进程为了备份或索引目的更改文件修改时间,那么是时候摆脱这种怪兽了。这两种作业都不需要更改修改时间!我建议解决问题的原因,而不是解决这些过程造成的混乱。请解释this@KansaiRobotmerge和mergetool在您当前所在的子目录中工作,它不会在整个Repository上运行,我也不会。在git 2.18.0版上工作。现在我们只需要明白为什么,我也不知道。
git config --global core.trustctime false
$git config --global core.trustctime false
$git rebase --skip