Ответ 1
Похоже, что моя проблема связана с временными метками файла. Благодаря this SO answer, предложенному Марком Лонгером, следующий параметр зафиксировал это для меня:
git config --global core.trustctime false
По какой-то причине в последнее время каждый раз, когда я вытягиваю и получаю конфликт слиянием, запуская 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/*
Похоже, что моя проблема связана с временными метками файла. Благодаря this SO answer, предложенному Марком Лонгером, следующий параметр зафиксировал это для меня:
git config --global core.trustctime false
Тривиальное решение
который работал на меня:
Git создает некоторые файлы, связанные с слиянием, в том же каталоге, где находится конфликтный файл, поэтому не забудьте запустить git mergetool
в правильном пути.
Это исправило это для меня: git mergetool.
Я нашел это исправление здесь
Решение 1:
$git config --global core.trustctime false
Если false, различия в ctime между индексом и рабочей копией игнорируются; полезно, когда время изменения inode регулярно изменяется чем-то вне Git (сканеры файловой системы и некоторые системы резервного копирования). и по умолчанию значение core.trustctime истинно.
Решение 2: просто:
$git rebase --skip
Это нормально, если вы пропустите его
Инструменты слияния лучше подходят для разрешения конфликтов, чем акции git. Это не может быть слишком самоуверенным. Например, Beyond Compare поддерживает синтаксис и многое сделает для вас. Если вы настроили его правильно, вы можете просто скомпилировать и запустить свое решение для тестирования. Если все это хорошо, то просто git add -A
и git rebase --continue
. То, что вы испытываете, является нормальным. Дважды проверьте свой код "trust mergetool exit code":
git config --global mergetool.trustExitCode true
Примечание. Параметр -A в git add
будет выполнять все изменения, включая удаления и новые, не проверенные файлы.
В моем случае проблема заключалась в том, что я открыл другое окно консоли и запускал приложение (основанное на создании-реагировании-приложении с горячей перезагрузкой) в этом окне.
Убив процесс и закрыв другое окно, вы отменили перезагрузку и повторную попытку.
Может быть, вы должны сначала запустить слияние? Затем, если есть конфликты слияния для разрешения, вы можете запустить mergetool. Но до тех пор, пока не будут созданы результаты неполного слияния, я думаю, что mergetool просто сообщит, что слить нечего.