Питання Як перейменувати місцеву філію Git?


Я не хочу перейменовувати віддалену гілку, як описано в Перейменуйте магістерську гілку для локальних та віддалених сховищ Git.

Як я можу перейменувати локальну гілку, яка не була висунута в віддалену гілку?


6713
2017-07-06 03:20


походження




Відповіді:


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

git branch -m <oldname> <newname>

Якщо ви хочете перейменувати поточну гілку, ви можете зробити це:

git branch -m <newname>

Спосіб запам'ятати це, є -m це для "переміщення" (або mv), яким чином ви перейменовуєте файли.


10699
2017-07-06 03:21



Те, що я дійсно хотів знати, полягає в тому, чи це обов'язково вплине на віддалену гілку, коли / якщо ти натиснеш - PandaWood
@PandaWood: він додасть нову гілку при натисканні, але не буде видаляти стару гілку. Якщо ви використовуєте git push -f --mirror, то він буде перейменовувати філію на пульт, але ви повинні використовувати цей метод лише в тому випадку, якщо пульт буде просто копією поточного сховища. Дивіться також це питання: stackoverflow.com/questions/1526794/git-rename-remote-branch - siride
@PandaWood, це залежить від способу push.default налаштований. За замовчуванням (matching) він натискає на пульт, ім'я якого збігається. Вам доведеться це зробити git push origin <newname>:<oldname> або ви створите нову віддалену гілку. Однак, якщо push.default встановлено на upstream, то можна push origin head і все йтиме на старе ім'я на пульт дистанційного керування. - Erin Stanfill
@ NightOwl888: -m, мабуть, короткий для "переміщення", слідуючи конвенції Unix про використання mv перейменувати файли. Причиною цього є те, що переміщення та перейменування в файловій системі inode на основі каталогу повністю еквівалентні. - siride
Довга назва -m варіант є --move, наприклад, git branch --move master перейменує поточну гілку, яка називається "master". - robenk


git branch -m old_branch_name new_branch_name

Наведене вище команда змінить назву вашої гілки, але ви повинні бути дуже обережними, використовуючи перейменовану гілку, оскільки вона все одно буде посилання на стару гілку, пов'язану з ним, якщо така є.

Якщо ви хочете натиснути деякі зміни на майстер після того, як ваша локальна гілка перейменована в new_branch_name (ім'я прикладу):

git push origin new_branch_name:master (тепер зміни йдуть на майстер галузі, але ваша місцева назва філії - new_branch_name)

Більш детальну інформацію див. У розділі "Як перейменувати назву своєї місцевої філії в Git"


351
2018-01-21 09:49





Перейменувати поточну гілку:

git branch -m <newname>

247
2018-06-20 15:05



Вам потрібно буде використовувати -M для перейменування, якщо ви лише змінюєте капіталізацію, оскільки git скаже вам, що ця філія вже існує. - cjspurgeon
Ви врятували мене цим коментарем. - jpadilladev
@ Cjspurgeon Git продовжує дивувати мене, будучи настільки інтуїтивним, в несподіваній мірі. З роками. - 0xc0de


Ось кроки для перейменування гілки:

1. switch to branch which needs to be renamed
2. git branch -m <new_name>
3. git push origin :<old_name>
4. git push origin <new_name>:refs/heads/<new_name>

EDIT (01.12.2017): Переконайтеся, що ви запускаєте команду git status і перевірте, що новостворена філія вказує на власний реф, а не на старшу. Якщо ви знайдете посилання на стару гілку, вам потрібно скинути значення upstream, використовуючи:

git branch --unset-upstream

186
2018-04-15 12:50



На якому кроці б один не вимкнути верхній потік? Перед кроком 4? - Cyclonecode
@Cyclonecode: так. після кроку 4. Але переконайтеся, що ви запустите Git статус, щоб перевірити, чи має посилання на стару гілку. - Milind Anantwar


Перейменування гілки буде корисним, як тільки закінчиться ваша гілка. Потім з'являються нові матеріали, і ви хочете розвиватися в тій же гілці, а не видаляти її і створити нову.

З мого досвіду, щоб перейменувати місцеву та віддалену гілку в 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

124
2017-10-14 03:22



Цей працював для мене краще. Тут 2 кроки дали мені такі помилки: error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git' - Anto
У вас виникла проблема при запуску команди git push origin :old-name new-name правильно? - trungk18
Так, точно (вибачте, я мав на увазі "2-й крок", а не "2 кроки" - втомився) - Anto


Відповіді до цих пір були правильними, але тут є додаткова інформація: Можна перейменувати гілку з "-m" (перемістити), але треба бути обережним, оскільки "-M" змушує перейменовувати, навіть якщо існує вже існуюча гілка з таким самим ім'ям. Ось витяг з сторінки "git-branch":

За допомогою опції -m або -M <oldbranch> буде перейменовано на <newbranch>. Якщо <oldbranch> мав відповідний reflog, він перейменований у відповідність <newbranch>, і створюється рефлог для запам'ятовування перейменування галузі. Якщо <newbranch> існує, -M повинен використовуватися, щоб змусити перейменування статися.


83
2017-09-24 13:21



Що відбувається з перезаписаною гілкою? - Kevin Dice
Вона перезаписана новим іменем / філією. Наприклад, якщо у вас є такі гілки в git: master b1 <- поточна гілка b2 після того, як ви зробите 'git branch -M b2', ви матимете лише: master b2 <- поточна гілка b1 буде відсутня, і якщо ви хочете відновити його, ви повинні перевірити це за своїми хеш. Ви можете побачити це, набравши "git reflog". Підбадьорює - Vanchev
The -M Прапор також корисний для того, щоб примусити перейменування, якщо ви просто виправите справу назви філії, наприклад змінюється myBranch до MyBranch. (З -m, git повертає fatal: A branch named 'MyBranch' already exists.) - Jon Schneider


1. Перейменувати

Якщо це ваша поточна галузь, просто робіть

git branch -m new_name

Якщо це інша галузь, яку ви хочете перейменувати

git branch -m old_name new_name

2. Відстеження нової віддаленої гілки

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

git push origin :old_name
git push --set-upstream origin new_name

68
2017-12-17 13:45





Я нерозумно назвав гілку, починаючи з дефісу, а потім перевірив майстра. Я не хотів видалити моя галузь, у мене була робота в цьому.

Жодна з них не працювала:

git checkout -dumb-name

git checkout -- -dumb-name

"с, 'S і \Також вони не допомогли. git branch -m не працює

Ось як я нарешті виправив це. Перейдіть до .git / refs / heads у вашій робочій копії, знайдіть ім'я файлу "-dumb-name", отримайте хеш відгалуження. Потім це перевірить його, створіть нову гілку зі здоровим ім'ям та видаліть стару.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

58
2017-11-09 07:31



Не могли б ви просто перейменувати файл у реф / голови? - android.weasel
Подібне Якщо вам доведеться копати в структурі каталогу, щоб зробити це магію, перейдіть до повного шляху та виконайте команду 'mv - dumb-name brilliant-name'. Зробіть 'git branch -av', і ви побачите структуру каталогу .git / refs. Або, можливо, "grep -R ^ .git / refs", щоб побачити хеші безпосередньо. - Dave X
Ви, мабуть, могли б використати reflog - Code Whisperer
Чесно кажучи, якщо це маршрут, який ви хотіли б взяти, я б уникав (IMO заплутаний і потенційно небезпечний, якщо ви не знаєте, що ви робите), перш за все, просувайте в каталозі .git і просто з деякими звичайні команди з аналізом деякого журналу "git" (використовуючи відповідні прапорці, щоб показати гілки, і з'ясувати, який шазом ви хочете перевірити нову гілку), а потім виконайте це. Потім видаліть назву гілки. Я зневажай що гіт наполягає на тому, що потрібно усвідомити всі свої внутрішні дії, щоб зробити деякі речі, але дуже вдячні вам може роби це. - Jon V
Складніше створити гілку з поганим ім'ям у 2.10.1+. Якщо ви що-небудь робите це, ви можете використовувати гітарну гілку -v, щоб отримати короткий хеш-версію ваших гілок (додати -r для віддаленого). Потім ви можете використовувати git rev-parse <shorthash>, щоб отримати повний хеш, якщо вам це потрібно. - House of Dexter