Переключення імен гілок в git


103

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

Деякі способи цього можна запитати / вирішувати: Як я перейменую свою головну гілку на щось інше, а потім перейменувати щось інше для освоєння? Як створити резервну копію майстра, а потім зробити так, щоб усі скоєні вами копії були на іншій гілці?

Дякую за всі (швидкі) відповіді! Вони всі хороші.

Відповіді:


144

Окрім інших коментарів, вам може бути корисним перемикач -m (move) на git-branch. Ви можете перейменувати свого старого майстра в щось інше, а потім перейменувати свою нову гілку в головну:

git branch -m master crap_work
git branch -m previous_master master

Залежно від робочого процесу ви також можете змінити будь-які посилання гілок у .git / config. Я змінив [branch "crap_work"]читання, [branch "master"]щоб майстер все ще синхронізувався з origin/master. Звичайно, стан двох репостів був таким, що це все-таки мало сенс.
однойменний

3
Це не перейменовує гілки на віддаленому репо, лише на локальному репо.
smohadjer

1
@smohadjer Щоб перейменувати віддалені, ви зробили б git push -uf origin masterі git push -u origin crap_work.
zyy

31

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

git checkout -b тема / майстер теми

Звідти я можу висунути зміни до публічних сховищ:

git push pu topic / name_name

або врешті-решт просто з’єднайте його назад із моєю основною гілкою:

git checkout master && git merge topic / topic_name

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

 git гілка -m майстер-мотлох
 git co -b master old_sha1_value

Це гарна політика. І подумайте про це, я бачив, що практикується в інших місцях. Дякую.
Ріміан

14

Почніть далі master, створіть гілку, яку називають in-progress, а потім відновіть masterдо попередньої фіксації.

$ git branch in-progress
$ git reset --hard HEAD^

1
Я не бачу причин, щоб це було проголосовано. Я робив це сам кілька разів, перш ніж дізнався про гілку -m і зрозумів, що господар не незмінно пов'язаний як постійне найменування гілки.
skiphoppy

7

Це порівняно просто:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

1
Так, останній є абсолютно необов’язковим - git checkout -bстворює гілку та робить її активною.
БорисОкунський

0

Це встановить вашого господаря в будь-яку точку за один крок:

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