Переместить зафиксированные изменения из удаленной ветки в новую ветку после реорганизации ветки репо

#git #version-control #bitbucket

#git #контроль версий #bitbucket

Вопрос:

Мой сценарий выглядит следующим образом. Я создал функциональную ветку от мастера, внес и зафиксировал в ней изменения локально. После этого репозиторий был реорганизован, прежде чем я смог нажать и объединить свои изменения. Теперь функциональные ветви должны создаваться из вновь созданной ветки разработки, а не из master. В рамках реорганизации моя ветка была удалена с сервера. Я еще не извлек (отредактировал) / извлек (отредактировал) с сервера. Я хочу попытаться переместить мои зафиксированные изменения из ныне удаленной ветки в новую ветку функций, которую я создам из ветки разработки. Я использую Bitbucket. мастер -> старая ветка с изменениями (удаленная с сервера, но доступная локально) для разработки -> новая ветка функций (будет создана)

Ответ №1:

давайте предположим, что ваша локальная старая ветка old-branch , новая функциональная ветка, которую вы хотите создать new-branch (вы ее еще не создали), старая базовая ветка master и новая базовая ветка dev , и давайте предположим, что ваш рабочий каталог чистый, а удаленное имя origin и, наконец, давайте предположим, что хэш вашегопервый коммит в old-branch is [first-hash] и ваш последний коммит [last-hash] (вы можете найти их, запустив git log old-branch ). так что это должно решить вашу проблему:

 git fetch origin;
git checkout dev;
git pull origin dev;
git checkout -b new-branch;
git cherry-pick [first-hash]^..[last-hash]; # pay attention to the ^ sign!
 

Теперь new-branch это точная копия old-branch .

Комментарии:

1. Спасибо за ответ … Я добрался до этапа git fetch origin… Когда я попытался проверить dev (elop)… Получил сообщение об ошибке с надписью, пожалуйста, зафиксируйте ваши изменения или спрячьте их перед переключением ветвей. Прерывание … Мне это кажется странным , так как у меня нет никаких не зафиксированных изменений … Также проверено в VS… Ничего для постановки или фиксации

2. Не обращайте внимания на мой предыдущий комментарий … Похоже на сбой в VS … Не показал никаких изменений … Перезапустил его и начал показывать нестационарные изменения … Продолжайте выполнять остальные шаги … Обновит после завершения и пометит его как ответ, если все получится…

3. Это сообщение означает, что ваш рабочий каталог не является чистым. вы можете зафиксировать их или отбросить git checkout . и проверить, какие изменения произошли git diff