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
slhck
источник
С решением по переименованию, я думаю, вы обнаружите, что теперь вы не можете dev_branchперейти к источнику (если оно имело место), и у вас больше не будет masterлокальной ветки.
aidan
Спасибо @slhck! По какой-то причине моя ветвь сцены не обновлялась после обычного слияния. Он продолжал говорить, что моя сценическая ветвь была современной. Использование «нашей» стратегии решило это для меня.
Пятно Синоби
наш затронул бы только конфликтующие фрагменты, но он хочет полностью обновить ветку, а не только конфликты! (это как минимум то, что мне нужно сделать и почему я нашел этот вопрос) - я пойду на переименование!
Мартин Мизер,