Перейменування філії в 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.