Подтвердить что ты не робот

Ошибка с git rebase ( "не может применяться..." )

Я являюсь администратором репозитория GitHub https://github.com/plison/opendial. Я хотел бы уменьшить количество коммитов в репозитории, так как в хранилище уже есть несколько тысяч коммитов, многие из которых являются незначительными изменениями отладки, которые могут быть легко сжаты вместе (особенно те, которые составляют несколько лет).

Поэтому я пытаюсь применить rebasing, чтобы скрутить часть моих коммитов. Однако у меня возникла следующая проблема:

  • Когда я печатаю, например. git rebase -i HEAD~10, я получаю довольно длинное количество строк фиксации (намного больше 10) в интерактивном редакторе. В чем может быть причина?
  • Что еще более важно, когда я закрою интерактивный редактор, чтобы начать перезагрузку, я систематически получаю сообщение об ошибке "error: not apply apply", , даже если я не делаю никаких изменений в коммитах ( т.е. если я оставлю все строки "pick", без каких-либо изменений или переупорядочения).

Как я могу решить эти проблемы? Следует отметить, что репозиторий был автоматически импортирован из предыдущего (SVN) репозитория, размещенного в Google Code. Преобразование показалось, что так хорошо работать, но мне интересно, почему я получаю эти ошибки при попытке переустановить мои коммиты.

4b9b3361

Ответ 1

История вашего проекта, похоже, содержит ряд коммитов за последнее время (предположительно вы их сделали). Наличие слияния в том, что вы хотите для интерактивной переустановки, обычно вызывает проблемы. (Интерактивная перебаза в значительной степени предполагает линейную историю, но коммиты слияния не являются линейными.)

В истории вашего проекта также есть две параллельные истории, которые объединены вместе в commit 11b3653 (используйте этот инструмент, например gitk или tig, чтобы он не отображался на веб-интерфейсе Github).

Я бы предположил, что вы пытаетесь сначала сгладить свою историю, чтобы избавиться от параллельных историй и удалить комманды. Затем, когда у вас есть строго линейная история, вы можете настроить переписывание истории, чтобы удалить все отладочные отладки.

Ответ 2

Как напоминание для себя о том, как решить эту проблему:

Сообщение об ошибке не очень информативно. Если вы введете

git rebase --continue

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

Чтобы увидеть, какие файлы имеют конфликты, введите

git status

Разрешите конфликты слияния в вашем любимом редакторе /IDE (подсказка: это должно начинаться с i и заканчиваться на ntelliJ)

Отметьте разрешение с помощью

git add .

Если все конфликты разрешены, вы должны увидеть что-то вроде этого:

(all conflicts fixed: run "git rebase --continue")

Так что продолжайте ребаз с

git rebase --continue

Надеюсь, ваш ребаз теперь будет успешным

git status

показывает:

On branch feature/DIG-19302-Upgrade-mockito-v2
Your branch is behind 'origin/feature/your-feature-branch' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)

nothing to commit, working directory clean

Не делай мерзавца. Если вы это сделаете, вы только перезапишете свои конфликты слияния. Вместо этого отправьте свои разрешения конфликтов слияния в ветку) с помощью

git push --force

Вы сделали! Ваш журнал git должен показывать только 1 коммит (это принудительное обновление, которое вы только что сделали)