Сменить имена веток в git

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

Вот несколько способов, которыми это можно задать / решить: Как мне переименовать свою основную ветку во что-то другое, а затем переименовать что-то еще в мастеринг? Как мне сделать резервную копию мастера, а затем сделать так, чтобы все коммиты, которые я сделал резервную копию, были в другой ветке?

Спасибо за все (быстрые) ответы! Все они хороши.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
105
0
45 034
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Это относительно просто:

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

Ага, последнее совершенно необязательно - git checkout -b создает ветку и делает ее активной.

BorisOkunskiy 11.11.2010 18:07

Начните с master, создайте ветку с именем in-progress, затем сбросьте master на более раннюю фиксацию.

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

Я не вижу причин для отклонения этого предложения. Я делал это сам несколько раз, прежде чем я узнал о ветке -m и понял, что master не является неизменяемым именем ветки.

skiphoppy 08.11.2008 00:22
Ответ принят как подходящий

В дополнение к другим комментариям вам может быть полезен переключатель -m (move) для git-branch. Вы можете переименовать свой старый мастер во что-то другое, а затем переименовать новую ветку в master:

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

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

Eponymous 17.09.2012 07:56

Это не переименовывает ветки в удаленном репо, а только в локальном репо.

smohadjer 09.12.2014 17:37

@smohadjer Чтобы переименовать пульты, выполните git push -uf origin master и git push -u origin crap_work.

zyy 26.06.2020 18:54

Я думаю, вам следует подумать о другой стратегии развития, чтобы предотвратить подобные проблемы. Мне кажется, что лучше всего никогда не заниматься разработкой непосредственно в моей основной ветке. Независимо от изменений, которые я вношу, я всегда создаю новую ветку для нового кода:

git checkout -b topic/topic_name master

Оттуда я могу отправить изменения в публичные репозитории:

git push pu topic/topic_name

или, в конце концов, просто объедините его с моей основной веткой:

git checkout master && git merge topic/topic_name

Если вам действительно нужно вернуться к более раннему моменту времени и установить его в качестве своего мастера, вы можете переименовать текущую ветку во что-то еще, а затем проверить более старую версию, чтобы стать вашим мастером:

 git branch -m master junk
 git co -b master old_sha1_value

Это хорошая политика. Если подумать, я видел, как это практиковалось в другом месте. Спасибо.

Rimian 19.08.2010 15:43

Это установит вашего мастера в любую точку за один шаг:

git checkout -B master new_point

Другие вопросы по теме