Як мені перейменувати локальну та віддалену гілку Git?


458

У мене є чотири гілки, як master -> origin / regacy, FeatureA -> origin / FeatureA. Як бачите, я ввів неправильне ім’я.

Тому я хочу перейменувати назву віддаленої гілки (origin / regacy → origin / legacy або origin / master)

Я пробую команду нижче:

git remote rename regacy legacy

Але консоль Git мені повернула повідомлення про помилку.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

Як я можу вирішити цю проблему?




Відповіді:


810

Введіть тут опис зображення


Є кілька способів досягти цього:

  1. Змініть місцеву філію та натисніть свої зміни
  2. Натисніть гілку на віддалене нове ім'я, зберігаючи початкове ім’я локально

Перейменування місцевих та віддалених

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

Введіть тут опис зображення


Перейменування лише віддаленого відділення

Кредит: ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Важлива примітка:

Під час використання git branch -m(переміщення) Git також оновлює гілку відстеження новою назвою.

git remote rename legacy legacy

git remote renameнамагається оновити ваш віддалений розділ у файлі конфігурації. Він буде перейменовувати пульт із вказаним іменем на нове ім'я, але у вашому випадку він не знайшов жодного, тому перейменування не вдалося.

Але це не зробить те, що ви думаєте; воно перейменовано віддалене ім’я локальної конфігурації, а не віддалену гілку. 


Примітка. Сервери Git можуть дозволяти вам перейменовувати гілки Git за допомогою веб-інтерфейсу або зовнішніх програм (наприклад, Sourcetree тощо), але ви повинні мати на увазі, що в Git вся робота виконується локально, тому рекомендується використовувати вищевказані команди до твору.


Вам ще потрібно щось зробити, після сказаного, і коли я намагаюся витягнути, я отримую повідомлення:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń

6
Не забудьте зняти стару верхівку за течією:git checkout <new_name> ; git branch --unset-upstream
Мігель Пінг

2
@ Коментар MiguelPing важливий. Коли я намагався перейменувати гілку, я вже натиснув на github, видаливши, перейменувавши локальну, вона та повторно натиснувши результати, коли стара назва буде знову використана. Якщо я --unset-upstreamперед повторним натисканням, це працює за призначенням.
Адам Таттл

1
Чи є спосіб уникнути автоматичного закриття відкритих PR-адрес на відділенні старої назви на пульті? Зіштовхнувся з цим у gitlab, де PR за старою назвою гілки був закритий після натискання на походження.
Хіманшу Танвар

142

Якщо ви неправильно назвали гілку І перемістили її у віддалений сховище, виконайте наступні дії для перейменування цієї гілки ( на основі цієї статті ):

  1. Перейменуйте свою місцеву філію:

    • Якщо ви знаходитесь у відділенні, ви хочете перейменувати:
      git branch -m new-name

    • Якщо ви перебуваєте в іншій галузі:
      git branch -m old-name new-name

  2. Видаліть old-nameвіддалену гілку та натисніть new-nameлокальну гілку :
    git push origin :old-name new-name

  3. Скиньте гілку вище за поточною локальною гілкою нового імені :
    Перейдіть до гілки, а потім:
    git push origin -u new-name


1
Після перших 2 кроків, якщо ви отримаєте повідомлення про помилку про поточну гілку вказує на гілку відсутності на віддаленому репо, третій крок виправляє це
Кевін Гук

1
@ Dr1Ku Потрібно знати різницю між git push <remote> --delete old_name& git push origin :old-name new-nameвидалити гілку.
Ашутош Шамолі

Користувачі BitBucket: виправте помилку на кроці 2 при перейменуванні master, у розділі Repo Details встановіть гілку за замовчуванням на нову гілку. Помилка:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
Колін

найпростіший серед інших
Абдулла Нілам

37

Схоже, існує прямий шлях:

Якщо ви просто хочете віддалено перейменувати гілки (не перейменуючи одночасно жодні локальні гілки), ви можете зробити це за допомогою однієї команди, наприклад

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Віддалено перейменовуючи гілки в Git

Дивіться оригінальну відповідь для більш детальної інформації.


1
Не працювало в git 2.20.1Видалено стару гілку, але нову не було створено.
Пол Разван Берг

26

Це також можна зробити наступним чином.

Спочатку перейменуйте місцеву гілку, потім віддалену гілку.

Перейменування місцевої філії:

Якщо ви ввійшли в іншу гілку,

git branch -m old_branch new_branch 

Якщо ви ввійшли в одну гілку,

git branch -m new_branch

Перейменування віддаленої гілки:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

5

Якщо ви вже натиснули неправильне ім’я на віддалений, зробіть наступне:

  1. Перейдіть до місцевої гілки, яку потрібно перейменувати

    git checkout <old_name>

  2. Перейменуйте місцеве відділення

    git branch -m <new_name>

  3. Натисніть на <new_name>локальну гілку та скиньте верхню гілку

    git push origin -u <new_name>

  4. Видаліть <old_name>віддалену гілку

    git push origin --delete <old_name>

На цьому грунтувалася ця стаття .


4

Додавання простого фрагмента для перейменування поточної філії (локальної та за походженням):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Пояснення з git docs:

Параметр git -m або -M, буде перейменований у. Якщо був відповідний рефлог, він перейменовується на збіг, і створюється запис рефлогу, щоб запам'ятати перейменування гілки. Якщо існує, -M необхідно використовувати, щоб змусити відбутися перейменування.

Спеціальний зміст: (або +: щоб дозволити непередбачені оновлення) спрямовує Git натискати на "відповідні" гілки: для кожної гілки, яка існує на локальній стороні, віддалена сторона оновлюється, якщо гілка з однойменним іменем вже існує на віддаленій стороні.

--set-upstream Налаштуйте інформацію відстеження, щоб вона вважалася гілкою гілки. Якщо ні вказано, то він за замовчуванням відповідає поточній гілці.


3

Не існує прямого методу,

  1. Перейменувати місцеве відділення ,

    Моя нинішня галузь - майстер

    git branch -m master_renamed #master_renamed - нове ім'я майстра

  2. Видалити віддалену гілку,

    git push origin --delete master #origin - віддалене ім’я

  3. Натисніть перейменовану гілку на віддалену,

    git push origin master_renamed

Це воно...


Приємний і простий і всього 3 кроки. Єдине поліпшення, яке я можу запропонувати, - git push -u origin master_renamedце встановити гілку як гілку відстеження
ut9081

2

Це можна зробити навіть без перейменування місцевої гілки в три простих кроки:

  1. Перейдіть до свого сховища в GitHub
  2. Створіть нову гілку зі старої гілки, яку ви хочете перейменувати
  3. Видаліть стару гілку

0

Я використовую ці псевдоніми git, і це майже робить роботу автоматично:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

Використання: переміщення git FROM_BRANCH TO_BRANCH

Він працює, якщо у вас є імена за замовчуванням, такі як master, origin тощо. Ви можете змінювати за своїм бажанням, але це дає вам ідею.


0

Мені довелося виконати наступне завдання, щоб перейменувати локальну та віддалену гілку:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>

Чим вона відрізняється від існуючої відповіді?
Хіманшу Танвар

0
  1. Перейменуйте місцеве відділення. Якщо ви знаходитесь у відділенні, ви хочете перейменувати:

    git гілка -m new-name

Якщо ви перебуваєте в іншій галузі:

git branch -m old-name new-name
  1. Видаліть віддалену гілку старої назви та натисніть локальну гілку нової назви.

    git push origin: старе ім'я new-name

  2. Скиньте гілку вище за течією для нової локальної гілки. Перейдіть на відділення, а потім:

    git push origin -u new-name

Все готово!


0
  • Перейменуйте місцеве відділення .

Якщо ви знаходитесь у відділенні, ви хочете перейменувати:

git branch -m new-name

якщо ви залишаєтесь на іншому відділенні в поточний час:

git branch -m old-name new-name
  • Видаліть віддалену гілку старої назви та натисніть локальну гілку нової назви.

Зупиніться на цільовій гілці та:

git push origin :old-name new-name
  • Скиньте гілку вище за течією для нової локальної гілки.

Перейдіть до цільової гілки, а потім:

git push origin -u new-name
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.