Git: слияние для мастеринга при автоматическом выборе перезаписывания основных файлов с помощью ветки
Я использую Git для отслеживания источника документации для латекса. Я хочу, чтобы главная ветвь была заполнена документами, подходящими для выпуска конечных пользователей, поэтому, когда кому-то что-то нужно, я могу просто переключиться на главную ветвь, скомпилировать и передать документ.
Я создаю новые ветки, когда руководство нуждается в серьезном обновлении. Но, когда руководство будет одобрено, его нужно снова объединить в мастера. При слиянии с веткой на master я хотел бы передать некоторую команду Git, чтобы сказать: "Забудьте о слиянии, просто используйте файл из ветки, чтобы перезаписать файл в master". Есть ли способ сделать это? В частности, я хочу, чтобы каждый раз открывать инструмент слияния. Спасибо заранее.
Ответы
Ответ 1
Чтобы игнорировать master
, когда вы выбрали branch
, выполните следующие действия:
git merge master --strategy=ours
http://schacon.github.com/git/git-merge.html
Как комментирует здесь "Компьютерный лингвист", это будет "игнорировать все из" мастера ", даже если оно имеет изменения в новых независимых файлах". Поэтому, если вы не являетесь OP и хотите более безопасное слияние, но это не так, как OP говорит "забыть о слиянии", тогда используйте эту превосходную безопасную команду из "Computer Linguist", а также его комментарий, чтобы он получил кредиты.
git merge -s recursive -X theirs branch
Ответ 2
В версии 1.7.1 из Git вы можете использовать "-Xtheirs" для объединения в самой ветки.
Например, если вы начинаете свою основную ветку,
начиная с мастера
git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch
Другим способом, который я видел, чтобы сделать это на основе этого сообщения, нужно сделать жесткий reset с editBranch. Например:
git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git reset --hard editBranch
Я думаю, что этот второй способ может быть лучшей игрой, но у меня не было возможности поиграть с ним достаточно.
Ответ 3
Я считаю, что вы можете сделать это с помощью стратегии слияния 'ours':
git checkout branch
git merge -s ours master
Но это не делает именно то, что вы хотите: оно переопределяет содержимое текущей рабочей ветки branch
, и вы хотите получить одно и то же содержимое на master
. То, что вы действительно хотите, это стратегия слияния theirs
, и для этого я указываю вам на этот аналогичный вопрос для способа сделать это. На практике все сводится к сбросу master
на точку branch
.