Как заменить главную ветку в Git, целиком, из другой ветки? [дубликат]
Возможные Дубликаты:
сделайте текущую ветвь Git главной ветвью
у меня есть две ветви в моем репозитории Git:
master
seotweaks(созданным изmaster)
Я создал seotweaks с намерением быстро объединить его обратно в master. Однако, это было три месяца назад и код в этой ветке на 13 версии впереди master.
он эффективно стал нашей рабочей главной веткой, как и весь код в master сейчас более или менее устарел.
очень плохая практика, я знаю, урок.
вы знаете, как я могу заменить все содержимое master филиала с seotweaks?
я мог бы просто удалить все в master и слияние, но это не похоже на лучшую практику.
5 ответов:
вы должны иметь возможность использовать стратегию слияния "ours" для перезаписи master с seotweaks следующим образом:
git checkout seotweaks git merge -s ours master git checkout master git merge seotweaksрезультат должен быть ваш мастер теперь по существу seotweaks.
(
-s oursсокращенно--strategy=ours)С документы о стратегии "наши":
это разрешает любое количество головок, но результирующее дерево слияния всегда является деревом текущей головки ветви, эффективно игнорируя все изменения от всех других ветвей. Он предназначен для замены старой истории развития боковых ветвей. Обратите внимание, что это отличается от параметра-Xours для рекурсивной стратегии слияния.
Как насчет использования git branch-m для переименования главной ветви в другую, а затем переименовать ветвь seotweaks в master? Что-то вроде этого:
git branch -m master old-master git branch -m seotweaks master git push -f origin masterЭто может удалить коммиты в origin master, пожалуйста, проверьте свой мастер origin перед запуском
git push -f origin master.
вы можете переименовать/удалить master на remote, но это будет проблемой, если многие люди основали свою работу на удаленной ветви master и вытащили эту ветвь в своем локальном РЕПО.
Это может быть не так здесь, так как все, кажется, работают на ветке 'seotweaks'.в этом случае вы можете:
git remote --show может не работать. (Сделайтеgit remote showчтобы проверить, как ваш пульт объявляется в вашем локальном РЕПО. Я буду считать -origin')
(О Гитхабе, 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но опять же:
- если другие пользователи пытаются вытащить в то время как мастер удаляется на удаленном, их тянет не удастся ("нет такого ref на удаленном")
- когда мастер воссоздан на удаленном, тяга будет пытаться объединить этот новый мастер на их местном (теперь старом) мастере: много конфликтов. Они на самом деле должны
reset --hardих локальный мастер в удаленную / главную ветвь, которую они получат, и забудут о своем текущем мастере.
С
seotweaksпервоначально был создан как ветвь отmaster, слияние его обратно в это хорошая идея. Однако, если вы находитесь в ситуации, когда одна из ваших ветвей на самом деле не является ветвью отmasterили ваша история настолько отличается, что вы просто хотите уничтожитьmasterветвь в пользу новой ветви, над которой вы выполняли работу, вы можете сделать это:git push [-f] origin seotweaks:masterэто особенно полезно, если вы получаете эту ошибку:
! [remote rejected] master (deletion of the current branch prohibited)и вы не используйте GitHub и не имеете доступа к вкладке "администрирование", чтобы изменить ветвь по умолчанию для вашего удаленного репозитория. Кроме того, это не вызовет время простоя или условия гонки, как вы можете столкнуться, удалив master:
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's 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
Comments