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




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






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




  1. master


  2. seotweaks (созданным из master)


Я создал seotweaks с намерением быстро объединить его обратно в master. Однако, это было три месяца назад и код в этой ветке на 13 версии впереди master.



он эффективно стал нашей рабочей главной веткой, как и весь код в master сейчас более или менее устарел.



очень плохая практика, я знаю, урок.



вы знаете, как я могу заменить все содержимое master филиала с seotweaks?



я мог бы просто удалить все в master и слияние, но это не похоже на лучшую практику.

1281   5  

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

    Ничего не найдено.