У меня есть ветка git (называемая v4), которая была создана мастером только вчера. В master внесено несколько изменений, которые я хочу внести в v4. Итак, в v4 я попытался выполнить перебазирование с master, и один файл продолжает лажать: однострочный текстовый файл, содержащий номер версии. Это файл app/views/common/version.txt
, который перед перебазированием содержит такой текст:
v1.4-alpha-02
Вот что я делаю:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
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".
version.txt
Теперь выглядит следующим образом :
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Итак, я привел его в порядок, и теперь он выглядит так:
v1.4-alpha-02
а затем я попытался продолжить: сначала я пытаюсь зафиксировать:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
Не повезло. Итак, я пытался добавить файл:
git add app/views/common/version.txt
Нет ответа. Думаю, отсутствие новостей - это хорошие новости. Итак, я пытаюсь продолжить:
> git rebase --continue
Applying: new version, new branch
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".
Именно в этот момент, после того, как я обдумываю это, я бьюсь головой о стол.
Что тут происходит? Что я делаю не так? Кто-нибудь может меня поправить?
РЕДАКТИРОВАТЬ - для unutbu
Я изменил файл, как вы предлагали, и получил ту же ошибку:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
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 master
а потом дайте ему потерпеть неудачу ; 2) затем вы редактируетеversion.txt
и делаете так, как должно выглядеть в этой точке, и сохраняете правку; 3) тогда тыgit add .../version.txt
; 4) тогда вы делаетеgit rebase --continue
(а не «совершаете» )! В случаеrebase --continue
успеха здесь он уже зафиксирован (здесь нет необходимостиgit commit
!), Поэтому все, что остается сделать, этоgit push
(если вы используете удаленное репо). Надеюсь, это поможет, если я правильно понял:)
- ура!Ответы:
Я столкнулся с аналогичной проблемой с ребазом. Моя проблема была вызвана тем, что одна из моих фиксаций изменила только файл, и при разрешении я отклонил изменение, внесенное в эту фиксацию. Я смог решить свою проблему, пропустив соответствующий commit (
git rebase --skip
).Вы можете воспроизвести эту проблему в тестовом репозитории. Сначала создайте репозиторий.
Затем зафиксируйте исходное содержимое
version.txt
в master.Создайте
v4
ветку и измените содержимоеversion.txt
.Вернитесь
master
и измените содержимоеversion.txt
так, чтобы во время перебазирования было конфликт.Вернитесь в
v4
ветку и попробуйте перебазировать. Какversion.txt
и планировалось, это не удается .Мы разрешаем конфликт, выбирая
master
содержаниеversion.txt
. Добавляем файл и пытаемся продолжить ребаз.Это не удается! Посмотрим, какие изменения
git
есть в нашем репозитории.Ах ах, нет никаких изменений. Если вы подробно прочитали предыдущее сообщение об ошибке,
git
сообщили нам об этом и рекомендовали к использованиюgit rebase --skip
. Он сказал нам: «Если ничего не осталось для обработки, скорее всего, что-то другое уже внесло такие же изменения; вы можете пропустить этот патч». Таким образом, мы просто пропускаем фиксацию, и перебазирование завершается успешно.Предупреждение : обратите внимание, что
git rebase --skip
это полностью отбросит фиксацию, котораяgit
пыталась перебазировать. В нашем случае это должно быть нормально, посколькуgit
он жалуется, что это пустой коммит. Если вы считаете, что потеряли изменения после завершения перебазирования, вы можете использовать егоgit reflog
для получения идентификатора фиксации вашего репозитория перед перебазированием и использовать его,git reset --hard
чтобы вернуть свое хранилище в это состояние (это еще одна деструктивная операция).источник
git rebase --skip
вы пропускаете только одну фиксацию. Я обычно выдаюgit status
перед тем, как пропустить фиксацию, чтобы узнать, нахожусь ли я в этой ситуации.rebase --skip
:).git reflog purge
илиgit reflog delete
вы все еще можете вернуть свои изменения, используяgit reflog
. Попробуйте проверить различные коммиты, на которые есть ссылки, один из них должен быть состоянием вашего дерева до того, как вы начали всеgit rebase
.Цитата отсюда: http://wholemeal.co.nz/node/9
источник
Это сообщение об ошибке является результатом вашего
git commit -a -m "merged"
. Если вы просто исправить файл, а затем запуститьgit add <file>
, иgit rebase --continue
он должен работать нормально.git rebase --continue
пытается выполнить фиксацию, но обнаруживает, что нет ожидающих изменений для фиксации (потому что вы их уже зафиксировали).источник
git add <file>
не решат проблему.git rebase --continue
все еще сообщаетNo changes - did you forget to use 'git add'?
Измените app / views / common / version.txt на
На этом этапе перебазирования помните, что вы разрешаете конфликты слияния, чтобы показать развитие не-главной ветви.
Итак, при ребейзинге из
в
конфликт, который вы разрешаете, заключается в том, как создать A * в ветке темы.
Итак, после этого
git rebase --abort
команды должны бытьисточник
Поведение, которое вы видите, - это не то, что я ожидал бы от типичного перебазирования только с этим конфликтом. Рассмотрите возможность использования отдельной ветки для выполнения этой перестановки (особенно, если вы уже отправили коммиты удаленно, чтобы выполнить быструю пересылку). Кроме того, это
git mergetool
может быть полезно для разрешения конфликтов и не забывать о выпуске файлаgit add
.В этом минимальном примере перебазирование работает должным образом. Можете ли вы привести пример, демонстрирующий наблюдаемое вами поведение?
источник
Вот несколько идей:
rm -rf .git/rebase-apply
источник