Подтвердить что ты не робот

Git merge -s theirs: Просто?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

$ git reset --hard origin/master

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

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

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

если вы действительно хотите сохранить запись об ошибке.

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

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

Ответ 2

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

<ы > httpx://seanius.net/blog/2011/02/ git -merge-с-их/

Обновить. Старый 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

Ответ 3

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

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

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

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

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

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