Разрешение разрешения слияния Git: могу ли я использовать стратегию для автоматического разрешения некоторых файлов? [Дубликат]

Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.

Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.

  1. Ваша точка входа (ов) выполняется в результате события. Например, в браузер загружается тег сценария с кодом. (Соответственно, поэтому вам, возможно, придется заботиться о готовности страницы запускать ваш код, если он требует, чтобы элементы dom были сконструированы первыми и т. Д.)
  2. Ваш код выполняется до завершения, однако многие асинхронные вызовы, которые он делает, без выполнения каких-либо ваших обратных вызовов, включая запросы XHR, установку тайм-аутов, обработчиков событий dom и т. д. Каждый из этих обратных вызовов, ожидающих выполнения, будет находиться в очереди, ожидая, что их очередь будет запущена после других событий
  3. Каждый отдельный обратный вызов XHR-запроса, установленного таймаута или dom события после вызова будет завершен.

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

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

131
задан Steven Wexler 2 August 2014 в 01:24
поделиться

3 ответа

Для каждого конфликтуемого файла вы можете указать

git checkout --ours -- <paths>
# or
git checkout --theirs -- <paths>

Из git checkout docs

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...

--ours --theirs При проверке путей из индекса проверьте этап # 2 (ours) или # 3 (theirs) для несвязанных путей.

индекс может содержать несвязанные записи из-за предыдущего сбитого слияния. По умолчанию, если вы попытаетесь проверить такую ​​запись из индекса, операция проверки завершится неудачно, и ничего не будет проверено. Использование -f будет игнорировать эти несвязанные записи. Содержимое с определенной стороны слияния можно проверить из индекса с помощью --ours или --theirs. С помощью -m изменения, внесенные в рабочий файл дерева, могут быть отброшены, чтобы повторно создать исходный конфликтный результат слияния.

170
ответ дан user 28 August 2018 в 22:00
поделиться

Обратите внимание, что git checkout --ours|--theirs будет полностью перезаписывать файлы , выбрав вариант theirs или ours, который может быть или не быть тем, что вы хотите сделать (если у вас есть

Если вместо этого вы хотите выполнить трехстороннее слияние с файлом и разрешить конфликтующие блоки с помощью --ours|--theirs, тогда как в противном случае они будут потеряны. вы можете прибегать к git merge-file, избегая конфликтов с обеих сторон. см. подробности в этом ответе .

9
ответ дан Community 28 August 2018 в 22:00
поделиться

Несмотря на то, что на этот вопрос дан ответ, дается пример того, что означает «их» и «наш», в случае git rebase vs merge. См. эту ссылку

Git Rebase theirs - фактически текущая ветвь в случае rebase . Таким образом, приведенный ниже набор команд фактически принимает ваши текущие изменения ветвления по удаленной ветви.

# see current branch
$ git branch
... 
* branch-a
# rebase preferring current branch changes during conflicts
$ git rebase -X theirs branch-b

Git Merge Для merge значение theirs и ours обращается вспять. Таким образом, чтобы получить тот же эффект во время слияния , т. Е. Сохранить текущие изменения ветки (ours) по объединенной удаленной ветви (theirs).

# assuming branch-a is our current version
$ git merge -X ours branch-b  # <- ours: branch-a, theirs: branch-b
41
ответ дан Gingi 28 August 2018 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: