最近出于某种原因,每次拉动并发生合并冲突时,运行git mergetool
报告“没有文件需要合并”:
$ git pull
First, rewinding head to replay your work on top of it...
Applying: replaced home button with Cancel
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
error: Your local changes to the following files would be overwritten by merge:
Classes/Controllers/HomeController.m
Please, commit your changes or stash them before you can merge.
Aborting
Failed to merge in the changes.
Patch failed at 0002 moved rollback into cancel button in log watching
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
$ git mergetool
No files need merging
如果我运行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/*
答案 0 :(得分:17)
看起来我的问题与文件时间戳有关。感谢Mark Longair建议的this SO answer,以下设置为我解决了这个问题:
git config --global core.trustctime false
答案 1 :(得分:12)
简单的解决方案
对我有用:
Git在冲突文件所在的同一目录中创建一些与合并相关的文件,因此请记住以正确的路径运行git mergetool
。
答案 2 :(得分:11)
这为我解决了这个问题:
git mergetool .
我发现此修复here
答案 3 :(得分:5)
解决方案1:
$git config --global core.trustctime false
如果为false,则忽略索引与工作副本之间的ctime差异;当gode(文件系统爬虫和一些备份系统)之外的某些东西定期修改inode更改时间时非常有用。 默认情况下,core.trustctime为true。
解决方案2: 只是:
$git rebase --skip
你可以跳过它
答案 4 :(得分:0)
合并工具比股票git更能解决冲突。它不能太自以为是。例如Beyond Compare具有语法感知功能,可以为您做很多事情。如果配置正确,您可以编译并运行您的解决方案进行测试。如果一切顺利,那么只需git add -A
和git rebase --continue
。你正在经历的是正常的。仔细检查您的“trust mergetool退出代码”设置:
git config --global mergetool.trustExitCode true
注意:git add
中的-A选项将暂存所有更改,包括删除和未删除的新文件。
答案 5 :(得分:0)
在我的情况下,问题是我打开了另一个控制台窗口并在该窗口中运行应用程序(基于create-react-app,热重新加载)。
杀死进程并关闭另一个窗口,然后中止rebase并重试为我工作。
答案 6 :(得分:0)
是否必须首先运行合并?然后,如果有要解决的合并冲突,则可以运行mergetool。但是,直到创建不完全合并的结果之前,我认为mergetool只会报告没有要合并的内容。