После устранения конфликтов git все еще жалуется?
Я обычно rebase
, когда я втягиваю изменения в своих товарищей по команде, и часто имею время конфликтов:
...
CONFLICT (content): Merge conflict in app/views/search/index.html.erb
Auto-merging public/stylesheets/application.css
CONFLICT (content): Merge conflict in public/stylesheets/application.css
Failed to merge in the changes.
Patch failed at 0001 organizing
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
Итак, после открытия каждого файла с конфликтом, исправляя его, фиксируя фиксированные файлы:
~/Projects/myApp[956f6e1...]% git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Я все равно получаю ту же ошибку...
~/Projects/myApp[64b3779...]% git rebase --continue
Applying: organizing
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
У меня вроде бы всегда была эта проблема, но я, наверное, никогда не выбрал ее, я всегда буду лениться и git rebase --skip
.
Как я могу правильно разрешить конфликт?
Ответы
Ответ 1
Итак, после открытия каждого файла с конфликтом, исправляя его, фиксируя фиксированные файлы...
Проблема заключается в том, что вы не должны commit
исправления. Если a.txt
имеет конфликт слиянием, тогда ваш журнал оболочки должен выглядеть так:
$ vim a.txt # fix conflict
$ git add a.txt
$ # no commit between add and rebase!
$ git rebase --continue
Вызов git rebase --continue
позаботится о самом коммите.
Я не уверен, как "вернуться" до вашего фиксации, когда вы находитесь в середине перестановки. git reset --hard HEAD
, вероятно, будет делать трюк, но лично я бы чувствовал себя безопаснее, просто направляясь прямо к git rebase --abort
и начинаю сначала без фиксации посередине.
Ответ 2
Я согласен с Марком Рушаковым, что фиксация фиксации не должна включать их.
Существует, по крайней мере, еще один способ, что git будет продолжать говорить, что "вы должны отредактировать все конфликты слияния, а затем пометить их как разрешенные с помощью git add" даже после того, как вы это сделали. Это может произойти, если вы удаляете файлы из git управления версиями, но оставьте файл без преобразования в рабочем дереве, а затем попытайтесь выполнить rebase.
Я смог решить эту проблему следующим образом:
- Завершить rebase с помощью
git rebase --abort
- Определите оскорбительный файл, посмотрев
git status
- Я перевел мои файлы без вершин в мой каталог
tmp
- Повторить rebase - в моем случае
git svn rebase
- Если вы хотите, чтобы файл с неверсированным файлом зависал, переместите его туда, где вы хотите (я оставил свой файл в моем каталоге tmp).
Надеюсь, что это поможет.
Ответ 3
Когда это случилось со мной, мне удалось решить эту проблему после того, как я понял (и добавил к индексу) во время rebase файл, в котором не имеет конфликта. Я предположил, что это может быть неправильно.
Поэтому я использовал git checkout -- <filename-with-no-conflict>
, а затем git rebase --continue
, и он работал.
Ответ 4
С Git 2.14 (Q3 2017) такого совета, заданного в риторическом вопросе, который не требует ответа (например, "did you forget to use 'git add'?
" ), больше не будет.
См. commit 6963893, совершить 9932242, commit 6c48686 (11 мая 2017 г.) Жан-Ноэль Авила (jnavila
).
(Слияние Junio C Hamano - gitster
- в совершить e638108, 29 мая 2017 года)
удобство использования: не задавайте вопросов, если не требуется ответ
Когда написание команды содержит
ошибки, программа Git пытается помочь пользователю, предоставив кандидатов
которые близки к невыполнимой команде. Например, Git печатает
следующее:
git: 'stahs' is not a git command. See 'git --help'.
Did you mean this?
stash
а затем выйдет.
Проблема с этим намеком заключается в том, что он формально не указан как намек, и пользователю фактически предлагается ответить на вопрос, а команда Git уже завершена.
Пользователю не повезло, что это была команда, которую он искал и ответили "да" в командной строке, эффективно запуская yes
.
Исходная ошибка заключается в том, что программы Git при запуске режим командной строки (без взаимодействия) не должен задавать вопросы, потому что эти вопросы обычно требуют ввода пользователем в качестве ответа что они не справятся. Это источник замешательства в UX уровень.
Чтобы улучшить общее удобство использования пакета Git, следующее правило был применен:
если предложение
- появляется в неинтерактивном сеансе
- печатается последним до выхода
- - это вопрос, касающийся пользователя ( "вы" )
предложение превращается в утвердительное и предлагает вариант.
В вашем случае "did you forget to use 'git add'?
" теперь заменяется на:
Вы должны "git add
" каждый файл с разрешенными конфликтами отмечать их как таковые.
Вы можете запустить git rm
в файле, чтобы принять "удаленные ими" для него.
Гораздо яснее.
Ответ 5
Я оказался в одной лодке и git rebase --continue
не помог. Запуск rm -fr .git/rebase-apply
исправил проблему, хотя