Git rebase не будет продолжаться после конфликта удаления/изменения

Я нахожусь в середине перестановки моего хозяина на ветку этапа

git checkout stage
git rebase master

В какой-то момент я удалил два файла, а затем изменил два файла в соответствии с GIT.

warning: too many files, skipping inexact rename detection
CONFLICT (delete/modify): test-recommendation-result.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation-result.php left in tree.
CONFLICT (delete/modify): test-recommendation.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation.php left in tree.
Failed to merge in the changes.
Patch failed at 0015.

Я хочу сказать "Да, git, продолжайте и удаляйте эти файлы", поэтому....

git rm test-recommendation-result.php
git rm test-recommendation.php
git rebase --continue

Git говорит:

Applying [Bug] Fix test recommender
No changes - did you forget to use 'git add', Stupid?

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".

Я говорю: "Не называй меня" глупым "и просто делай то, что я тебе говорил!"

Сейчас мы находимся в противостоянии. Кто прав и как это исправить?

Ответ 1

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

Нет никакой гарантии, что у коммита не было других файлов, которые не конфликтуют и должны быть объединены. git rebase --skip потеряет эти файлы. Вы этого не хотите.

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

Ответ 2

Если все остальное не удается, прочитайте сообщение.

Этот патч пытается изменить два файла, но они уже были удалены; удаление их снова ничего не делало.

Просто запустите git rebase --skip.

Ответ 3

Я ударил это, когда коммит добавил двоичный файл, который противоречил существующему файлу.

Я получил его:

  • удаление существующего файла,
  • изменение одного символа в комментарии в другом файле и
  • "git добавить, что нерелевантные изменения.

Git снова был счастлив.:)

Ответ 4

Существует не одна волшебная последовательность команд, которая всегда запускается для решения этой ситуации. Если бы было, GIT разработчики просто выполнили бы это действие и не беспокоили пользователя.

Учтите, что эта ошибка также может произойти, если вы выбрали вишневый выбор/пересадку/резервное копирование изменений, которые влияют на файл, который был рефакторирован или переименован.

Например, скажем, что у вас есть ветвь с именем support/1.0, которая выглядит так:

    com.somewhere.package-a/
      MyClass.java
      MyOtherClass.java

Теперь предположим, что между версиями 1.0 и 1.5 это получило рефакторинг. Итак, теперь release/1.5 выглядит следующим образом:

    com.somewhere.package/
      a/
        MyClass.java
        ANewClass.java
      b/
        MyOtherClass.java

Теперь скажем, что у вас есть ветвь функций из версии 1.5, которую вы пытаетесь выполнить обратно в ветвь функции, основанную на support/1.0. В этом коммите были внесены изменения во все три файла из версии 1.5 (MyClass.java, ANewClass.java и MyOtherClass.java).

Если вы попытаетесь использовать rebase или простой выбор вишни, чтобы помочь с back-port, может произойти одна из двух вещей:

  • Если файлы были переименованы как часть пересаживаемых изменений, или между непосредственными родительскими фиксациями изменений, являющихся трансплантированное, GIT встроенное обнаружение переименования может поймать, что эти файлы являются потомками файлов с оригинальными именами и просто применить изменения к исходным файлам.

  • Если файлы были переименованы достаточно далеко назад в историю релиз 1.5 (после выпуска версии 1.0), GIT расскажет вам, что файлы были удалены в release/1.0, потому что это не знать, какие файлы в 1.0 соответствуют изменениям от 1.5.

ANewClass.java почти наверняка вызовет ошибку об удалении, если только он не был добавлен в одно из изменений, которые были перенесены обратно.

Следовательно, поскольку код может потеряться, если вы слепо следуете одному набору команд для разрешения этой ситуации, почему GIT предлагает вам руководство для руководства.