Я столкнулся с проблемой, которую не знаю, как решить.
Я сделал ребаз против мастера из своей ветки:
git rebase master
и получил следующую ошибку
First, rewinding head to replay your work on top of it...
Applying: checkstyled.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging AssetsLoader.java
CONFLICT (content): Merge conflict in AssetsLoader.java
Failed to merge in the changes.
Patch failed at 0001 checkstyled.
Итак, я пошел в свой любимый редактор, исправил конфликт одной строки, сохранил файл, выполнил git status и получил следующий результат:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: PassengerContactHandler.java
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: AssetsLoader.java
#
Я сделал git add AssetsLoader.java и статус git и получил следующее:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: AssetsLoader.java
# modified: PassengerContactHandler.java
#
и когда я сделал git rebase --continue, я получил:
git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Я знаю, что могу пропустить патч и продолжить перебазирование, но я не уверен, будут ли изменения в PassengerContactHandler.java перенесены в мою ветку или нет.
поэтому я не уверен, что мне делать?
Изменить: может быть, файл с разрешенным конфликтом точно такой же, как и исходная версия?
Большое спасибо Лукас
Изменить, это снова случилось со мной:
Это снова случилось со мной,
(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/world/level1/Level-1.xml
# modified: George.java
# modified: DefaultPassenger.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# mb-art/originalAssets/27dec/
((307ac0d ...) | REBASE) $ git rebase - продолжить
You must edit all merge conflicts and then
mark them as resolved using git add
git --version
git version 1.7.1
git status
, верно? Нет недостающего раздела под ним?git-rebase
никогда не должен сообщать о неразрешенных конфликтах, если их нет. Если вам удастся воспроизвести проблему в более простом тестовом примере, отладить будет намного проще, но все же, если вы неgit status
сообщаете о конфликтах, когда этоgit rebase --continue
происходит, и ваша версия Git актуальна, вы можете попробовать отправить электронное письмо разработчику Git. список рассылки на git@vger.kernel.org с максимально возможной диагностической информацией.Ответы:
Это происходит потому, что при устранении конфликта вы удалили весь код в патче, который был применен к ветке, на которую вы выполняете ребазинг. Используйте,
git rebase --skip
чтобы продолжить.Немного подробнее:
Обычно при устранении конфликта во время перебазирования вы редактируете конфликтующий файл, сохраняя часть или весь код в патче, который в настоящее время применяется к ветке, на которой выполняется перебазирование. После исправления патча и выполнения
вы получите (обычно зеленую) строку, показывающую измененный файл
git rebase --continue отлично подойдет в этой ситуации.
Иногда, однако, при разрешении конфликта вы удаляете все в своем новом патче, оставляя только код из ветки, которую вы перебазировали. Теперь, когда вы добавите файл, он будет точно таким же, как тот, который вы пытались перебазировать. git status не будет показывать зеленую строку, отображающую измененные файлы. Теперь, если вы это сделаете
git будет жаловаться с
Что на самом деле git хочет от вас в этой ситуации, так это использовать
чтобы пропустить патч. Раньше я никогда этого не делал, так как всегда был не уверен, что на самом деле будет пропущено, если я это сделаю, для меня не было очевидно, что на самом деле означает «пропустить этот патч». Но если у вас не будет зеленой линии с
после редактирования конфликтующего файла, его добавления и выполнения git status вы можете быть уверены, что удалили весь патч, и вместо этого можете использовать
продолжать.
... но не полагайтесь на это (и убедитесь, что не добавляли оставшиеся файлы в папки вашего репозитория)
источник
git add ...
становится действительно раздражающим печатать после изменения кучи файлов с длинными путями.git add --all-the-files-i-changed
Могу ли я бежать раньшеgit rebase continue
?Кажется, ошибка в Git 1.7
Вот хорошая статья о том, как решить эту проблему .
В принципе это должно работать, если вы сделаете
после разрешения ваших конфликтов, а затем
должно сработать.
источник
Я получил это предупреждение, когда у меня были неустановленные файлы. Убедитесь, что у вас нет неустановленных файлов. Если вы не хотите, чтобы неустановленные файлы менялись, отмените изменения с помощью
источник
Попробуйте запустить это в командной строке:
Должен вызвать интерактивный редактор, позволяющий разрешить конфликты. Проще, чем пытаться сделать это вручную, к тому же git распознает, когда вы выполняете слияние. Также позволит избежать ситуаций, когда вы не полностью сливаетесь случайно, что может произойти, если вы попытаетесь сделать это вручную.
источник
После устранения конфликта убедитесь, что измененные файлы добавлены в ваши промежуточные файлы. Это решило проблему для меня.
источник
Вы пропустили конфликт слияния в AssetsLoader.java. Откройте его и найдите маркеры конфликтов (">>>>", "====", "<<<<<"), а затем снова выполните git add. Выполните git diff --staged, если вам сложно его найти.
источник
git diff --staged
что-нибудь полезное? Это указывает на то, какие изменения вы собираетесь зафиксировать, чтобы разрешить конфликт (ы) слияния на данном этапе перебазирования. В одном из файлов должен быть бит «ой, это не то, что я намеревался сделать для устранения этого».git add
файл даже с маркерами конфликта в нем. В конце концов, такие файлы могут быть совершенно законными!У меня только что была эта проблема, и хотя я думаю, что причин может быть несколько, вот моя ...
У меня был хук git pre-commit, который отклонял коммиты при определенных условиях. Это нормально при фиксации вручную, так как будет отображаться вывод хука, и я могу либо исправить это, либо проигнорировать, используя commit --no-verify.
Проблема, похоже, в том, что при перебазировании rebase --continue также вызовет ловушку (чтобы зафиксировать самый последний набор изменений). Но rebase не будет отображать вывод хуков, он просто увидит, что это не удалось, а затем выплюнет менее конкретную ошибку, говоря: «Вы должны отредактировать все конфликты слияния, а затем пометить их как разрешенные с помощью git add».
Чтобы исправить это, выполните все свои изменения и вместо выполнения «git rebase --continue» попробуйте выполнить «git commit». Если вы страдаете от той же проблемы с крючком, вы должны увидеть причины, по которым он не работает.
Интересно, что хотя git rebase не отображает вывод git hook, он принимает параметр --no-verify для обхода перехватчиков.
источник
git rebase
принимает--no-verify
вариант. Однако он пропускает толькоpre-rebase
ловушку, но эта опция не применяется к последующим вызовамgit commit
.После исправления изменений вы можете забыть запустить git add -A
источник
Я просто наткнулся на этот вопрос. Я бы не стал,
git rebase --skip
потому чтоgit status
наглядно показывать пошаговые модификации, которые я хотел сохранить. Хотя у меня неожиданно были какие-то лишние файлы. Я решил судалить немаркированные модификации, то
git rebase --continue
удалось.источник