Перейменування філії в GitHub


296

Я просто перейменував свою місцеву філію за допомогою

git branch -m oldname newname

але це лише перейменовує локальну версію гілки. Як я можу перейменувати цю на GitHub?



Ви перевірили в налаштуваннях адміністратора? У моєму поточному проекті на github немає гілок, але ви можете перейменувати там репо, тому я думаю, що ви можете також перейменувати гілки.
— evanmcdonnal

12
@evanmcdonnal Nope, ви не можете перейменувати гілку Git із сайту GitHub.
— Ендрю Маршалл

Відповіді на це запитання майже загально помилкові. Питання не в тому, як перейменувати гітку git, а в тому, як перейменувати гілку github . Багато речей на Github прив’язані до гілки, що означає, що будь-яка відповідь потребує покриття цих речей. Наприклад, перейменування майстра на головний
— gman

@gman Для чого це варто, схоже, ці відповіді відповідали духу питання ОП. Питання ОП, можливо, не було чітко сформульоване з технічно вимогливої ​​точки зору або з відповідного питання, яке ви зараз розглядаєте. Але тоді це питання не випливає з глибокої технічної бази ні git, ні GitHub. З цієї точки зору можна вважати це питанням для початківців або елементарним. Як такий, він формулюється та відповідає відповідним чином для цієї аудиторії. Розчарувальні, звичайно, але я вважаю, що це питання, відповіді ці відповідні / відповідні, особливо для попередніх QM використання BLM git / Hub.
— SherylHohman

Відповіді:


309

Як уже згадувалося, видаліть старий на Github & re-push, хоча використовувані команди трохи більше деталізовані, ніж потрібно:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Простий. Трохи розбираючи команди, команда git push по суті:

git push <remote> <local_branch>:<remote_branch>

Тому поштовх без вказаного local_branch по суті означає "не брати нічого з мого локального сховища, і зробити це віддаленою гілкою". Я завжди думав, що це зовсім нерозумно, але це так, як це робиться.

Редагувати: Станом на Git 1.7 є альтернативний синтаксис для видалення віддаленої гілки:

git push origin --delete name_of_the_remote_branch

Редагувати: Як згадує @ void.pointer у коментарях

Зауважте, що ви можете комбінувати 2 натискання:

git push origin :old_branch new_branch

Це одночасно видалить стару гілку і висуне нову.

Це можна перетворити на простий псевдонім, який бере аргументи віддаленої, оригінальної гілки та нової назви гілки ~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

Використання:

git branchm origin old_branch new_branch

Зауважте, що позиційні аргументи в командах оболонки були проблематичними для старих (до 2.8?) Версій git, тому псевдонім може змінюватися залежно від версії git. Детальну інформацію див. У цій дискусії .


32
Зверніть увагу , що ви можете комбінувати 2 натискні операції: git push origin :old_branch new_branch. Це одночасно видалить стару гілку і висуне нову.
— void.pointer

4
Чи є якась причина, чому нову гілку не можна натиснути перед видаленням старої? Я особисто віддаю перевагу процесам, коли операція видалення відбувається після успішної операції створення, про всяк випадок, коли щось піде не так.
— jmort253

7
Не працює. Він просто поставить гілку назад на Github зі старою назвою.
— геофф

1
@AdamParkin 1. git branch -m new_branch(перейменуйте old_branch на new_branch) 2. git commit -m 'msg', 3. git push4. Ммм, old_branch з'являється в Github, Google, і я привожу до вашої відповіді 5. git push origin :old_branch(каже, що видалено) 6. git push origin new_branch... завершує потім каже * [new branch] new_branch -> old_branch. Поверніться до Github і old_branchзнову з’явиться. Якщо я видаляю в веб-інтерфейсі Github, у мене є можливість "Відновити", тому здається, що натискання new_branch просто відновлює.
— Kcvin

2
Потрібно пам’ятати, що коли ви перейменовуєте відділення, будь-які відкриті вами запити на виклики проти цього запиту на виклик автоматично закриються. Нам довелося перейменувати гілку назад, а потім знову відкрити вручну всі запити на
— виклик

24

Наступні команди працювали на мене:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want

Це коротка відповідь, яка працює. До речі, перша відповідь також може бути поставлена ​​як остання у відповіді.
— Ерік Ван

ця відповідь стосується git not github
— gman

1
Власне, я просто робив це двічі, і це працювало на github.
— spozun

17

Я знайшов 3 команди, як можна змінити назву гілки git, і ці команди - це швидший спосіб зробити це

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

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

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


1
git push --set-upstreamє найважливішою частиною, якщо вам трапиться змінити ім'я філії локально за допомогою програми github перед видаленням віддаленої гілки.
— Луї Ян

ця відповідь стосується git not github
— gman

12

Просто видаліть стару гілку і створіть нову.

Приклад (виключно перейменування віддаленої гілки):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

Вам також, ймовірно, слід перейменувати місцеву гілку та змінити параметри того, куди натискати / тягнути.


1
Чи не повинна бути 2-а команда git push origin newname:refs/heads/newname? master та newname можуть не вказувати на одне й те саме.
— Стів Фоллі

"майстер" є лише прикладом, зараз зміниться.
— Ві.

Можливо, слід змінити порядок двох команд (тобто спочатку завантажити нове ім’я, видалити старе після цього)
— Vi.

ця відповідь стосується git not github
— gman

@ gman, Чи не перейменовуєш його у Git-mud, чи не перейменовуєш його у Github-mud?
— Ві.

9

Перейменуйте гілки в локальних та віддалених git

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

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

git branch -m new-name

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

git branch -m old-name new-name

2. Видаліть віддалену гілку старої назви та натисніть нову локальну гілку.

git push origin :old-name new-name

3. Скиньте гілку вище за течією для нової локальної гілки.

Перейдіть на відділення, а потім:

git push origin -u new-name

Тож висновок такий

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name

ця відповідь стосується git not github
— gman

Це для git, і GitHub знаходиться під git, тому він буде працювати, і він працює як зі мною, так і з іншими
— Abdelrahman Mohamed

Це не працює. Спробуйте перший та другий кроки git branch -m new-name && git push origin :master new-name. Це не вдасться. Якщо ця відповідь стосується лише git, а не github, то це питання є дублікатом кількох інших питань і його слід закрити. Якщо мова йде дійсно про github, то відповідь має стосуватися github. Ця відповідь не відповідає.
— gman


2

Ось що для мене спрацювало:

1.) Створіть спочатку нову гілку: git push github newname: refs / heads / newname

2.) На сайті github перейдіть у налаштування та змініть гілку за замовчуванням на нову назву

3.) Видаліть стара назва git push github - видалити стару назву


0
  1. Завантажте Atlassian SourceTree (безкоштовно).
  2. Імпортуйте свій локальний клон сховища.
  3. Клацніть правою кнопкою миші свою гілку, щоб перейменувати її на бічній панелі. У контекстному меню виберіть "Перейменувати гілку ..." та перейменуйте її.
  4. Натисніть на походження.

Дякую, але мені довелося перейти на відділення, а також імпортувати його.
— Спалах Шерідан

1
ця відповідь стосується git not github
— gman

0

У цій статті показано, як зробити це по-справжньому легко.
1. Для перейменування локальної гілки Git ми можемо використовувати команду Git -m для зміни імені:
git branch -m feature1 feature2
2. Якщо ви просто шукаєте команду для перейменування віддаленої гілки Git, це це "
git push -u origin feature2:feature3
Перевірте, чи немає у вас теги на гілці, перш ніж це зробити. Ви можете зробити це за допомогою git tag.


ця відповідь стосується git not github
— gman

0

Ще один спосіб - перейменувати такі файли :

  1. перейдіть по каталогу проекту
  2. перейменувати .git/refs/head/[branch-name]в.git/refs/head/new-branch-name
  3. перейменувати .git/refs/remotes/[all-remote-names]/[branch-name]в.git/refs/remotes/[all-remote-names]/new-branch-name

Перейменуйте голову та пульти як на вашому локальному ПК, так і на походженнях / віддалених серверах

Відділення тепер перейменовано (місцеве та віддалене!)


Увага

Якщо ваша поточна назва гілки містить слэш ( /), git створить каталоги на зразок:

поточна назва філії: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

назва філії бажання: "new-branch-name"

  1. перейдіть по каталогу проекту
  2. скопіюйте branchфайл з.git/refs/*/awe/some/
  3. покласти його .git/refs/head/.
  4. скопіюйте branchфайл з усіх.git/refs/remotes/*/awe/some/
  5. посадити їх .git/refs/remotes/*/.
  6. перейменувати всі захищені branchфайли в new-branch-name.
  7. перевірте, чи зараз схожа структура та каталог:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. зробіть те саме на всіх віддалених джерелах / серверах (якщо вони є)
    • інформація : на віддалених серверах зазвичай немає каталогів refs / remote / *, оскільки ви вже на віддаленому сервері;) (ну, можливо, у розширених конфігураціях git це можливо, але я цього ніколи не бачив)

Відділення тепер перейменовано awe/some/branchна new-branch-nameмісцеве (місцеве та віддалене!)

Каталоги з назвою філії видалено.


Інформація: Цей спосіб може бути не найкращим, але він все ще працює для людей, які можуть мати проблеми з іншими способами


ця відповідь стосується git not github
— gman

0

У моєму випадку мені потрібна була додаткова команда, щоб отримати свою перейменовану гілку, щоб підключитись .
git branch --unset-upstream
origin newname

(Для зручності введення тексту), я спочатку git checkout oldname.
Потім запустіть наступне:

git branch -m newname
git push origin :oldname або абоgit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Цей додатковий крок може бути необхідний лише тому, що я (як правило) налаштовую віддалене відстеження на своїх гілках через . Таким чином, коли я перевірив, згодом мені потрібен лише тип, а неgit push -u origin oldnameoldnamegit pushgit push origin oldname

Якщо я НЕ використовую команду git branch --unset-upstreamраніше git push origin newbranch, git відновлює oldbranch і натискає newbranchна origin oldbranch- перемагаючи мій намір.


ця відповідь стосується git not github
— gman

@gman Точка взята. Моє рішення використовує git локально для перейменування гілки на GitHub, віддалено, після перейменування її на локальну копію git у сховищі GitHub. Тому, можливо, це може вважатися спеціалізованим рішенням, коли ви хочете використовувати командний рядок, а не інтерфейс веб-сайту GitHub, і у вас є локальний клон, який ви також хотіли б оновити. Дякуємо, що підкреслили цю відмінність та пояснили, що ця відповідь стосується особливого випадку, а не загального рішення.
— SherylHohman

Проблема полягає у особливостях github-зв’язків із гілками. Спробуйте перейменувати майстра на основний, і ваші вказівки не зможуть.
— gman

-1

Наступні команди перейменують гілку локально, видаляють стару гілку на віддаленому місці та натискають нову гілку, встановлюючи локальну гілку для відстеження нового віддаленого:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch

Хоча ваш фрагмент коду може вирішити проблему, ви повинні описати, яка мета вашого коду (як він вирішує проблему). Крім того, ви можете перевірити stackoverflow.com/help/how-to-answer
— Ahmad F

ця відповідь стосується git not github
— gman

-1

Просто так . Щоб локально перейменувати гілку git та віддалено використовувати цей фрагмент (перевірено та працює як шарм):

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

Пояснення:

  1. Перейменуйте крок:

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

  2. Крок видалення:

    Посилання на Git: походження git push: експериментальне Знайдіть ref, що відповідає експериментальному у сховищі початкових даних (наприклад, refs / heads / експериментальний) та видаліть його.

  3. Оновлення на віддаленому кроці РЕПО (попередня посилання для відстеження):

    Посилання на Git: --set-upstream Для кожної гілки, яка є оновленою або успішно висунутою, додайте посилання висхідної (відстежуючої) інформації, використовувану без аргументів git-pull [1] та інших команд. Для отримання додаткової інформації дивіться відділення..merge в git-config [1].


ця відповідь стосується git not github
— gman

-1

3 прості кроки

  • git push origin head

  • git гілка -m стара-гілка-ім’я нова-гілка-ім’я

  • git push origin head


ця відповідь стосується git not github
— gman

-1

На гілці git запустити гілку гілки -m old_name new_name Це дозволить змінити ім'я гілки у вашому локальному джерелі push gpo repo: old_name new_name Це дозволить натиснути змінене ім'я на віддалене і видалити старе відділення git push origin -u new_name Встановити локальну гілку для відстеження віддалене відділення. Це вирішує питання


ця відповідь стосується git not github
— gman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.