После устранения конфликтов git все еще жалуется? - PullRequest
30 голосов
/ 31 августа 2010

Я обычно 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.

Как мне на самом деле разрешить конфликт?

Ответы [ 5 ]

36 голосов
/ 31 августа 2010

Итак, после открытия каждого файла с конфликтом, исправления его и последующего фиксирования фиксированных файлов ...

Проблема в том, что вы не должны 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 и начинал сначала, не совершая посередине.

3 голосов
/ 19 мая 2013

Я согласен с Марком Рушаковым, что фиксация коммитов не должна включать их фиксацию.

Есть по крайней мере еще один способ, которым git будет продолжать говорить: «Вы должны отредактировать все конфликты слияния и затем пометить их как разрешенные с помощью git add», даже после того, как вы это сделали. Это может произойти, если вы удалите файлы из системы управления версиями git, но оставите неверсионный файл в своем рабочем дереве, а затем попытаетесь выполнить ребазирование.

Мне удалось решить эту проблему следующим образом:

  1. Завершить ребаз с помощью git rebase --abort
  2. Определите файл-нарушитель, посмотрев на git status
  3. Я переместил свои неверсированные файлы в каталог tmp
  4. Повторить ребаз - в моем случае git svn rebase
  5. Если вы хотите, чтобы неверсированный файл висел вокруг, переместите его туда, где вы хотите (я оставил свой в своем каталоге tmp)

Надеюсь, это поможет.

2 голосов
/ 12 мая 2014

Когда это случилось со мной, мне удалось решить это после того, как я понял, что отредактировал (и добавил в индекс) во время перебазирования файл, у которого нет конфликта , я догадался, что это может быть неправильно , Поэтому я использовал git checkout -- <filename-with-no-conflict>, а затем git rebase --continue, и это сработало.

0 голосов
/ 29 мая 2017

С Git 2.14 (3 квартал 2017 г.) такого рода советы, которые даются в риторическом вопросе, не требующие ответа (например, "did you forget to use 'git add'?"), больше не будут.

См. commit6963893 , коммит 9932242 , коммит 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 program.

Первоначальная ошибка заключается в том, что программы Git при запуске в режиме командной строки (без взаимодействия) не должны задавать вопросы, потому что эти вопросы обычно требуют ввода данных пользователем в качестве ответа, который они выиграли 'Я действительно не справлюсь.Это источник путаницы на уровне UX.

Чтобы улучшить общее удобство использования пакета Git, было применено следующее правило:

, если появляется предложение

  • в неинтерактивном сеансе
  • печатается последним перед выходом
  • - это вопрос, адресованный пользователю («вы»)

предложение превращается в утвердительное ипредлагает вариант.

В вашем случае "did you forget to use 'git add'?" теперь заменяется на :

Вы должны 'git add' каждыйфайл с разрешенными конфликтами, чтобы пометить их как таковые.
Вы можете запустить git rm для файла, чтобы принять «удаленный ими» для него.

Намного понятнее.

0 голосов
/ 12 марта 2013

Я оказался в одной лодке и git rebase --continue не помог. Запуск rm -fr .git/rebase-apply исправил проблему, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...