GIT Перезаписать ветку с мастером


33

У меня есть старая ветка разработчика, которая полностью устарела. Я не хочу его удалять, но хочу полностью заменить его содержимое веткой master. То есть я хочу dev_branch = master

Я старался:

git merge -s ours dev_branch

Не сработало, хотя ...

Ответы:


54

Если вы хотите, чтобы все изменения были внесены masterв dev_branch, то:

git checkout dev_branch
git reset --hard master

Это работает, только если другие люди не клонировали репозиторий.

Если вы уже dev_branchнажали на пульт, вы должны сделать:

git push --force

Для принудительного нажатия на пульт. Внимание: это сломает историю ветки для людей, которые ее клонировали раньше! Затем другие люди должны будут сделать git pull --rebaseизменения, dev_branchчтобы получить изменения.


Вы также можете переименовать ветку dev во что-то старое, а затем создать новую ветку masterс тем же именем:

git branch -m dev_branch old_dev_branch
git branch -m master dev_branch

Или используйте oursстратегию - не уверен, почему она не будет работать для вас:

git checkout master
git merge -s ours dev_branch
git checkout dev_branch
git merge master

С решением по переименованию, я думаю, вы обнаружите, что теперь вы не можете dev_branchперейти к источнику (если оно имело место), и у вас больше не будет masterлокальной ветки.
— aidan

Спасибо @slhck! По какой-то причине моя ветвь сцены не обновлялась после обычного слияния. Он продолжал говорить, что моя сценическая ветвь была современной. Использование «нашей» стратегии решило это для меня.
— Пятно Синоби

наш затронул бы только конфликтующие фрагменты, но он хочет полностью обновить ветку, а не только конфликты! (это как минимум то, что мне нужно сделать и почему я нашел этот вопрос) - я пойду на переименование!
— Мартин Мизер,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.