git mergetool сообщает: «Нет необходимости объединять файлы» - PullRequest
39 голосов
/ 21 октября 2011

По какой-то причине в последнее время каждый раз, когда я получаю и получаю конфликт слияния, при запуске 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/*

Ответы [ 7 ]

17 голосов
/ 29 октября 2011

Похоже, моя проблема была связана с временными метками файлов.Благодаря этому SO-ответу , предложенному Марком Лонгэйром, следующие настройки исправили его для меня:

git config --global core.trustctime false
15 голосов
/ 21 марта 2018

Это исправило это для меня:
git mergetool .

Я нашел это исправление здесь

12 голосов
/ 28 ноября 2014

Тривиальное решение

, который работал для меня: Git создает некоторые связанные со слиянием файлы в том же каталоге, где находится конфликтующий файл, поэтому не забудьте запустить git mergetool по правильному пути.

5 голосов
/ 27 сентября 2012

Решение 1:

$git config --global core.trustctime false

Если false, различия ctime между индексом и рабочей копией игнорируются; полезно, когда время изменения inode регулярно изменяется чем-то вне Git (сканеры файловой системы и некоторые системы резервного копирования). и core.trustctime по умолчанию имеет значение true.

Решение 2: просто:

$git rebase --skip

Вы можете пропустить это

0 голосов
/ 18 марта 2019

Может ли быть так, что сначала вы должны запустить слияние?Затем, если есть конфликты слияния для разрешения, вы можете запустить mergetool.Но до тех пор, пока не будут созданы результаты неполного слияния, я думаю, что mergetool просто сообщит, что слить нечего.

0 голосов
/ 12 декабря 2017

В моем случае проблема заключалась в том, что у меня было открыто другое окно консоли, и я запускал приложение (на основе create-реагировать-приложение, с горячей перезагрузкой) в этом окне.

Завершение процесса и закрытие другого окна, затем отмена ребазинга и повторная попытка сработали для меня.

0 голосов
/ 22 октября 2011

Инструменты слияния лучше разрешают конфликты, чем стандартные мерзавцы.Это не может быть слишком самоуверенным.Например, Beyond Compare работает с синтаксисом и многое сделает для вас.Если он настроен правильно, вы можете просто скомпилировать и запустить свое решение для тестирования.Если все хорошо, то просто git add -A и git rebase --continue.То, что вы испытываете, это нормально.Дважды проверьте настройку «Код выхода доверия Mergetool»:

git config --global mergetool.trustExitCode true

Примечание. Параметр -A в git add будет вносить все изменения, включая удаления и новые, неотслеживаемые файлы.

...