Замена опубликованной ветки
Предположим, что существует вышестоящий проект, который не использует git, и я поддерживаю кодовую базу на основе выпущенных tar-архивов этого проекта. Я поддерживаю git ветку master
и моя ветка my
от него. Я публикую обе ветки в публичном репозитории git. Всякий раз, когда апстрим выпускает новый основной релиз, я создаю новый коммит на master
это то же самое, что выпущенный тарбол. Я тогда работаю на слияние главы master
в my
и опубликовать обе ветки.
Теперь предположим, что апстрим наконец-то приходит в себя и публикует свой репозиторий git. Я хотел бы иметь мой master
отслеживать и стать идентичным с апстримом с этого момента в истории и далее. Каков рекомендуемый курс действий? Должен ли я просто сделать master-2
это идентично восходящему, и объединить его в my
оттуда отказавшись от старого master
?
1 ответ
В вашем локальном хранилище вы можете:
- Удалить ветку используя
git branch
затем (если хотите) создайте новую ветку 'master'. - Переименуйте ветку на что-то другое, используя
git branch
, а затем опционально создайте новый. - Направьте 'master' ветку на любой коммит, который вы хотите, используя
git branch
или жеgit reset
,
Для удаленного хранилища вы можете:
- Удалить ветку (нажать на удаление), используя
git push --delete
, - Перезаписать ветку любым коммитом, который вы хотите, используя
git push --force
,
Если вы делаете это с удаленным репозиторием, который используется другими людьми или системами:
- Если вы используете другое имя, другие люди могут легко
git checkout
новая ветвь, но они могут не заметить изменения и запутаться в том, почему вдруг в основной ветке внезапно появляется нулевая активность. - Если вместо этого вы поместите другую историю в одну и ту же "главную" ветку, все заметят это - но в зависимости от
git
версию и команду обновления, которую они использовали, она либо остановится с сообщением об ошибке (требующее некоторой ручной очистки), либо попытается объединить обе истории (требуя дополнительной ручной очистки).