Git Merge -s их: просто? - PullRequest
       14

Git Merge -s их: просто?

20 голосов
/ 20 февраля 2010

Я проверил различные вопросы по этому вопросу. Первый дает огромный вопрос и ответ (уместен? Не уверен), а второй дает неправильный ответ как лучший ответ.

У меня есть ветка с именем great-use-this. У меня есть другая ветка под названием master. Я хочу объединить great-use-this в master и избежать конфликтов автоматического слияния.

Какой самый простой и простой способ сделать это ? 1013 *

Примечание: Я на самом деле понял это (используя третью ветвь и ours, но в любом случае это было бы хорошо для SO.

Ответы [ 3 ]

25 голосов
/ 20 февраля 2010

Да, создание третьей ветви и выполнение merge -s ours - это одно из решений.

Но Вы найдете все "давайте не будем рекламировать" свои "стратегии слияния" здесь .

Между заменой вашей работы другой ветвью или просто избавлением от текущей работы и заменой полностью другой, Джунио С. Хамано (main Git Maintainer ) предпочитает второй подход:

Я думаю "-s theirs" еще хуже. Это то, как вы откажетесь от того, что сделали (возможно, потому что у другой стороны есть намного лучшее решение, чем ваш хак), но это можно сделать намного проще и аккуратно с помощью:

$ git reset --hard origin/master

Некоторые люди могут сказать: «Но с« merge -s theirs »я тоже могу сохранить то, что сделал». Этот сброс просто отбрасывает то, что я сделал.

Эта логика также ошибочна. Вы можете вместо этого:

$ git branch i-was-stupid 
$ git reset --hard origin/master

если вы действительно хотите вести учет своей неудачи.

Одна большая проблема "-s theirs", по сравнению с вышеупомянутым "сбросом к исходному состоянию, отбрасыванием или откладыванием неудачной истории", заключается в том, что ваша 'основная' история, на которой основана ваша дальнейшая разработка, сохранит вашу потерпеть неудачу в нем навсегда, если вы сделали "-ssis" .

Надеюсь, со временем вы станете лучшим программистом, и в конечном итоге у вас может появиться что-то, что стоит поделиться с миром у вершины вашей основной ветки. Однако, когда это происходит, вы не можете предложить свою основную ветвь для перетекания вверх по течению, так как более широкий мир вообще не будет интересоваться вашими более ранними ошибками.

8 голосов
/ 06 марта 2011

столкнулся с этой проблемой на днях:

httpx: //seanius.net/blog/2011/02/git-merge-s-theirs/

Обновление : старый URL не работает. Вот статья на Archive.org Wayback Machine:

git merge -s ours ref-to-be-merged
git diff --binary ref-to-be-merged | git apply -R --index
git commit -F .git/COMMIT_EDITMSG --amend
2 голосов
/ 29 июля 2010

Я склоняюсь к варианту git reset --hard BRANCHNAME, но обнаружил, что в Git есть "их" (по крайней мере, версия 1.7.1).

Если вы хотите попробовать это, просто добавьте аргумент "-Xtheirs" к команде слияния.

Например, начиная с мастера:

git checkout -b editBranch<br /> -- edit your files --<br /> git add .<br /> git commit -m "Updated the files"<br /> git checkout master<br /> git merge -Xtheirs editBranch

Если вы удалили какие-либо файлы в ветви редактирования, вы получите конфлит слияния, который может быть разрешен с помощью git rm FILENAME.

Еще раз, похоже, что сброс --hard BRANCHNAME является лучшим вариантом, но если у вас есть случай, когда вам действительно нужны их, это должно вас туда доставить.

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