Git: возможно ли сделать ветку в мастере, игнорируя любые конфликты слияния? - PullRequest
23 голосов
/ 18 октября 2011

У меня есть git-репо с одной веткой, в дополнение к мастеру. Я хочу сделать эту ветку мастером - полностью перезаписать мастер. Очевидно, что я мог бы выполнить слияние, но это приведет ко многим конфликтам, и кажется, что для их решения требуется много работы, когда я знаю, что ВСЕГДА хочу файл из дополнительной ветви, а не из мастера.

Можно ли преобразовать ветку в master или выполнить слияние и указать git всегда отдавать предпочтение файлу из одной ветви над другой?

Заранее спасибо!

Ответы [ 3 ]

24 голосов
/ 18 октября 2011

Вы можете сделать это за один выстрел с помощью команды сброса:

git checkout master
git reset --hard topicBranch

При аппаратном сбросе текущая ветвь указывает на данный коммит. Это отбросит любые коммиты на мастере, которых нет в ветке темы; они не будут объединены.

Это же предупреждение относится и к ребазам: не делайте этого, если вы уже добавили ветку master в любой репозиторий, предоставленный другим разработчикам.

7 голосов
/ 18 октября 2011

Если вы являетесь единственным разработчиком, имеющим доступ к этому репозиторию, и он не используется другими разработчиками, это довольно легко сделать, создав новые ветви. Прежде чем начать, убедитесь, что ваш репозиторий чист (все изменения были проверены в текущей ветке).

Сделайте резервную копию вашей старой ветки master:

git checkout master
git branch oldMaster

Удалить старого мастера и создать нового мастера:

git checkout topicBranch
git branch -D master
git branch master

Если хостинг в репозитории на удаленном сервере, вам необходимо обновить удаленный:

git push --force remoteName master:master

ВАЖНО: Если другие разработчики извлекают данные из вашего репозитория, этот метод будет генерировать для них ошибки при следующем извлечении из вашего репозитория или при его переходе в репозиторий.

0 голосов
/ 18 октября 2011

Я все еще не эксперт в git, но похоже, что вы хотите команду rebase :

git checkout branch_name
git rebase master
git checkout master

Похоже, что это автоматически объединит все изменения с вашим мастером в точке, где ваша ветвь отличается от основной, а затем повторно примените текущие изменения к мастеру поверх этих изменений (так что вам не придется объединять ).

Конечно, если вы просто хотели полностью перезаписать мастер, я думаю, что вы просто сможете вставить эту ветку в главный репозиторий, если вы используете опцию force. Примерно так:

git push --force origin branch_name

Тогда ваш пульт будет иметь все изменения из вашей ветки в основной ветке, и вы сможете вытащить его обратно ...

git checkout master
git pull --force origin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...