Как заменить master branch в Git, полностью, из другой ветви? [дубликат]

Возможные Дубликаты:
сделайте текущую ветвь Git главной ветвью

у меня есть две ветви в моем репозитории Git:

  1. master
  2. 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? Что-то вроде этого:--3-->

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

Это может удалить коммиты в origin master, пожалуйста, проверьте свой origin master перед запуском git push -f origin master.


вы можете переименовать/удалить master на remote, но это будет проблемой, если многие люди основали свою работу на удаленной ветви 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 и не имея доступа к вкладке "администрирование", чтобы изменить ветку по умолчанию для удаленного репозитория. Кроме того, это не вызовет простоя или условий гонки, как вы можете столкнуться, удалив 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