Возможный дубликат:
Сделать текущую ветвь Git главной ветвью
У меня есть два ветки в моем репозитории Git:
master
seotweaks
(созданный первоначально от master
) Я создал seotweaks
с намерением быстро seotweaks
его обратно в master
. Однако это было три месяца назад, а код в этой ветке - 13 версий впереди master
.
Это фактически стало нашей рабочей ветвью мастера, так как теперь весь код в master
более или менее устарел.
Очень плохая практика, которую я знаю, извлеченный урок.
Знаете ли вы, как я могу заменить все содержимое master
ветки на те, что есть в seotweaks
?
Я мог бы просто удалить все в master
и объединить, но это не похоже на лучшую практику.
Вы должны иметь возможность использовать стратегию слияния "наш" для перезаписывания мастера с помощью seotweaks следующим образом:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Результат должен быть вашим хозяином в настоящее время, по сути, seotweaks.
(-s ours
сокращен для --strategy=ours
)
Из документации о стратегии 'ours':
Это разрешает любое количество голов, но результирующее дерево слияния всегда относится к текущему ветки ветки, эффективно игнорируя все изменения из всех других ветвей. Он предназначен для замены старой истории развития боковых ветвей. Обратите внимание, что это отличается от опции -Xours для стратегии рекурсивного слияния.
Как насчет использования git branch -m, чтобы переименовать главную ветвь в другую, а затем переименовать ветку seotweaks в master? Что-то вроде этого:
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
Это может удалить фиксацию в исходном главном, проверьте исходный мастер перед запуском git push -f origin master
.
git push -f origin master
Вы можете переименовать/удалить мастер на удаленном компьютере, но это будет проблемой, если многие люди основали свою работу на удаленном главном ветки и потянули эту ветвь в локальное репо.
Это может быть не так, потому что все, кажется, работают над веткой seotweaks
.
В этом случае вы можете:
git remote --show может не работать.
(Сделайте git remote show
, чтобы проверить, как ваш пульт объявлен в вашем локальном репо. Я буду считать 'origin
')
(Что касается комментариев GitHub, house9: "Мне нужно было сделать еще один шаг, нажмите кнопку" Admin
"на GitHub и установите" Default Branch
", к чему-то другому, чем" master
", затем верните его назад" )
git branch -m master master-old # rename master on local
git push origin :master # delete master on remote
git push origin master-old # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master # create master on remote
Но опять же:
reset --hard
их локальный мастер на удаленную/ведущую ветвь, которую они будут извлекать, и забыть об их текущем главном. Поскольку seotweaks
был первоначально создан как ветка от master
, слияние его обратно в это хорошая идея. Однако, если вы находитесь в ситуации, когда один из ваших веток в действительности не является ответвление от master
или ваша история настолько отличается, что вы просто хотите, чтобы уничтожить master
ветвь в пользу новой отрасли, что вы делали работу на вас может сделать это:
git push [-f] origin seotweaks:master
Это особенно полезно, если вы получаете эту ошибку:
! [remote rejected] master (deletion of the current branch prohibited)
И вы не используете GitHub и не имеете доступа к вкладке "Администрирование", чтобы изменить ветвь по умолчанию для удаленного репозитория. Кроме того, это не приведет к простоям или условиям гонки, которые могут возникнуть при удалении мастера:
git push origin :master
Я нашел, что это лучший способ сделать это (у меня была проблема с моим сервером, который не позволял мне удалять).
На сервере, на котором размещен origin
репозиторий, введите следующее из каталога внутри репозитория:
git config receive.denyDeleteCurrent ignore
На рабочей станции:
git branch -m master vabandoned # Rename master on local
git branch -m newBranch master # Locally rename branch newBranch to master
git push origin :master # Delete the remote master
git push origin master:refs/heads/master # Push the new master to the remote
git push origin abandoned:refs/heads/abandoned # Push the old master to the remote
Назад на сервере, на котором размещен origin
репозиторий:
git config receive.denyDeleteCurrent true
Кредит автору блога http://www.mslinn.com/blog/?p=772