Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Для каждого конфликтуемого файла вы можете указать
git checkout --ours -- <paths>
# or
git checkout --theirs -- <paths>
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
--ours
--theirs
При проверке путей из индекса проверьте этап # 2 (ours
) или # 3 (theirs
) для несвязанных путей.индекс может содержать несвязанные записи из-за предыдущего сбитого слияния. По умолчанию, если вы попытаетесь проверить такую запись из индекса, операция проверки завершится неудачно, и ничего не будет проверено. Использование
blockquote>-f
будет игнорировать эти несвязанные записи. Содержимое с определенной стороны слияния можно проверить из индекса с помощью--ours
или--theirs
. С помощью-m
изменения, внесенные в рабочий файл дерева, могут быть отброшены, чтобы повторно создать исходный конфликтный результат слияния.
Обратите внимание, что git checkout --ours|--theirs
будет полностью перезаписывать файлы , выбрав вариант theirs
или ours
, который может быть или не быть тем, что вы хотите сделать (если у вас есть
Если вместо этого вы хотите выполнить трехстороннее слияние с файлом и разрешить конфликтующие блоки с помощью --ours|--theirs
, тогда как в противном случае они будут потеряны. вы можете прибегать к git merge-file
, избегая конфликтов с обеих сторон. см. подробности в этом ответе .
Несмотря на то, что на этот вопрос дан ответ, дается пример того, что означает «их» и «наш», в случае 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