ошибка: ветвь «обновление» не полностью объединена - PullRequest
1 голос
/ 31 марта 2019

Я недавно клонировал свое приложение из Bitbucket и извлек его в новую ветку upgrading, где я обновил свое приложение с rails 5.0.0.1 до rails 5.1.6:

$ git checkout -b upgrading

Сначала я обновил свой Gemfile,я запустил обновление пакета:

$ bundle update

С веб-сайта railsdiff и из нового приложения rails 5.1.6, созданного для этой цели, я отредактировал свое старое приложение, добавив или удалив код и удаливили создавая файлы, и я отредактировал файлы миграции, указав версию класса для наследования.Затем я зафиксировал свое приложение с помощью git перед запуском rails app:update:

$ git add -A
$ git commit -m 'before rails app update'
$ rails app:update

Было сделано несколько изменений, затем я сбросил базу данных и запустил весь свой набор тестов:

$ rails db:migrate:reset
$ rails test

Я посеял базу данных, запустил сервер и протестировал приложение графически.Все было отлично.Наконец, я сделал коммит, переключился на ветку master, сквош слил ветку обновления и наконец сделал один последний коммит:

$ git add -A
$ git commit -m "work in progress"
$ git checkout master 
$ git merge --squash upgrading
$ git commit -m "upgrade to Rails 5.1.6"
$ git push

Все было хорошо, кроме случаев, когда я пытался удалить ветку upgrading, потому чтооперация завершилась неудачно:

$ git branch -d upgrading
error: The branch 'upgrading' is not fully merged.
If you are sure you want to delete it, run 'git branch -D upgrading'.

Я знаю только несколько команд git basic, поэтому понятия не имею, почему это произошло.Буду признателен за любую помощь.

Ответы [ 3 ]

2 голосов
/ 31 марта 2019

Не слишком большая проблема, если можно.

git branch -d - это "застенчивый" режим удаления, крайне осторожный в отношении всего, что возможно будет потеряно.С описанными вами операциями никакая работа не будет потеряна, так как все коммиты ветки теперь на вашем master (даже если они раздавлены).

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

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

* с git tag before-the-squash upgrading
** с git branch -D upgrading

1 голос
/ 31 марта 2019

Проблема в том, что вы слили ветку upgrading в master с --squash. Принятие коммитов в ветке upgrading оставляет вам новый sha для коммита. Из-за этого нового sha git не может обнаружить, что эта ветка была объединена с master, и считает, что это не так. Вместо того, чтобы подавить слияние, вы могли бы перебазировать свою ветку upgrading на все 1 коммит, а затем слить это с мастером без сквоша.

Это приведет к тому, что один коммит будет объединен с мастером, за исключением того, что git будет знать о том, что ветвь действительно была объединена, поскольку ветвь sha фактически находится в истории мастера, и у нее не будет проблем. когда вы пытаетесь удалить ветку upgrading.

Если вы на 100% уверены, что master имеет изменения из ветви upgrading, просто используйте git branch -D upgrading, чтобы сообщить git, что вы действительно хотите удалить эту ветку.

Если вы хотите синхронизировать ветку upgrading с мастером перед объединением, а также сократить коммиты до одного в процессе, вы можете сделать:

git rebase -i master

И тогда вы можете выбрать то, что вы хотите с вашими коммитами. Вы можете сквошить, выбирать, исправлять и т. Д. Это оставит вас с аккуратной веткой upgrading, которую можно без проблем объединить с мастером.

1 голос
/ 31 марта 2019

Git пытается защитить вас от потери всего, над чем вы работали ... Git обнаружил, что вы не объединили работу, которую вы делали в этой ветке (обновление)

Но, как вы сказали, вы хотите удалить, потому что процесс не удалось. Таким образом, это означает, что вы уверены, что хотите удалить его и потерять все, что сделали там.

Для этого мерзавца также говорит, как это сделать. Просто беги:

git branch -D обновление

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