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.