Git: можно сделать ветку в мастер, игнорируя любые конфликты слияния?
У меня есть репозиторий git с одной веткой, помимо мастера. Я хочу сделать эту ветку мастером - полностью переписать мастера. Очевидно, что я мог бы слить, но это приведет к множеству конфликтов, и, похоже, им предстоит большая работа по их решению, когда я знаю, что ВСЕГДА хочу, чтобы файл был из дополнительной ветки, а не из мастера.
Можно ли преобразовать ветвь в master или выполнить слияние и сообщить git, чтобы всегда поддерживать файл из одной ветки над другой?
Спасибо заранее!
Ответы
Ответ 1
Вы можете сделать это одним выстрелом с помощью команды reset:
git checkout master
git reset --hard topicBranch
Жесткий reset сделает текущую точку ветвления заданным данным. Это отбросит любые коммиты на мастера, которые еще не находятся в ветке темы; они не будут объединены.
Здесь также применяется одно и то же предупреждение для переустановок: не делайте этого, если вы уже нажимаете главную ветвь на любой репозиторий, совместно используемый другими разработчиками.
Ответ 2
Если вы являетесь единственным разработчиком, обращающимся к этому репозиторию, и он не используется совместно с другими разработчиками, это довольно легко сделать, создав новые ветки. Прежде чем начать, убедитесь, что ваш репозиторий чист (все изменения были проверены в текущей ветке).
Сделайте резервную копию старой ветки мастера:
git checkout master
git branch oldMaster
Удалить старый мастер и создать новый мастер:
git checkout topicBranch
git branch -D master
git branch master
Если хостинг в репозитории на удаленном сервере, вам нужно будет обновить пульт:
git push --force remoteName master:master
ВАЖНО: Если другие разработчики вытаскивают из вашего репозитория, этот метод будет генерировать ошибки для них в следующий раз, когда они выйдут из вашего репо или вы нажмете на их репо.
Ответ 3
Я все еще не эксперт в git, но похоже, что вы хотите rebase:
git checkout branch_name
git rebase master
git checkout master
Похоже, что это автоматически сгенерирует все изменения в вашем хозяине в точке, где вы разветвляетесь от мастера, а затем повторно применяйте текущие изменения к master ontop этих изменений (так что вам не придется объединять).
Конечно, если вы просто хотите полностью перезаписать мастера, я думаю, вы должны просто нажать эту ветку на главный репозиторий, если вы используете параметр force. Что-то вроде этого:
git push --force origin branch_name
Затем ваш пульт будет иметь все изменения от вашего ветки в главной ветки, и вы можете вытащить его обратно...
git checkout master
git pull --force origin