Переименовать ветвь Git локально и удаленно?

Есть ли способ переименовать ветвь Git локально и направить ее на удаленную ветку, даже если в удаленную ветвь уже есть много коммитов?

Или необходимо создать новую локальную ветвь, удалить старую локальную ветвь, а затем повторить операцию в удаленном репозитории?

Ответ 1

Да,

функция move существует, чтобы переименовать ветку локально

git branch --move <old_name> <new_name>

но чтобы нажать его, вы должны удалить старый и нажать новый

git checkout <new_name>
git push origin [--set-upstream] <new_name>
git push origin --delete <old_name>

--set-upstream является обязательным, он настраивает новую локальную ветвь для отслеживания нажатой --set-upstream

Вы можете использовать следующие сокращения:

  • перемещать локально (--move):

    git branch -m <old_name> <new_name>
    
  • нажмите новую ветку (--set-upstream, optional):

    git push origin [-u] <new_name>
    
  • delete (--delete):

    git push origin -d <old_name>
    

NB.

Благодаря комментариям torek:

Кстати, стоит упомянуть, что вы должны

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

Причина № 1 заключается в том, что эти пользователи должны будут настроить.

Причиной для № 2 является, в основном, просто эффективность: он избегает необходимости повторной копии объектов в восходящее репо, которое снижает фиксацию при удалении ветки (большинство голой репозиториев делают это, и большинство репозиториев, которые принимают нажатие, являются голой)