Избегайте слияния файлов, которые имеют изменения в обеих ветках

Вопрос задан: 8 месяцев назад Последняя активность: 8 месяцев назад
up 1 down

Контекст: я пытаюсь заставить git вести себя как какой-то другой инструмент управления исходным кодом, пытаясь убедить их использовать только git. Тем временем мне нужно запустить git как раба, делая все то же самое, что и scm в действии.

Как я могу заставить мерзавца использовать стратегию -X theirs на уровне файлов, а не на уровне блоков?

В принципе, если у меня есть два фрагмента из двух веток в одном файле, git способен объединить те, что включают оба. Но вместо этого я хочу перезаписать весь файл mybranch с файлом theirbranch.

РЕДАКТИРОВАТЬ:

То же самое можно сделать наоборот, чтобы слиться со стратегией -X ours на уровне файлов и перезаписать изменения на theirbranch если есть изменения в том же файле на mybranch.

git

1 ответ

up 0 down accepted

В соответствии с Разрешить конфликты Git слияния в пользу их изменений во время вытягивания, если вы хотите выполнить слияние со своими изменениями, вы можете использовать git merge -X theirs. Это, однако, не может быть применено на файловой основе.

Если вы хотите отменить «наши» изменения и использовать «их» версию файла, вы можете просто выполнить проверку:

git checkout <their revision or branch> -- <path to file>

Или, как указано в этот ответ, есть также --theirs вариант, когда в состоянии конфликта:

git checkout --theirs <path>

Только не забудь git add а также git commit после разрешения конфликтов.


Если вам нужен список файлов с различиями в двух ветвях (два произвольных коммита):

git diff <branch 1> <branch 2> --name-only