Содержит ли git rebase больше конфликтов, чем git merge?

Правда ли, что git rebase более подвержен конфликтам, чем git merge? Я слышал об этом раньше, и это упоминается в этом посте

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

  1. Из-за механики git rebase конфликты слияний встречаются чаще, и, казалось бы, с ними сложнее справиться

Автор не вдавался в подробности, чтобы обосновать это утверждение, но я слышу его не впервые.

Я слышал и понимаю, что из-за повторного воспроизведения коммитов коммитом вы столкнетесь с одним и тем же конфликтом несколько раз, но я никогда не сталкивался с этим. Может быть, поведение rerere теперь по умолчанию в git rebase?

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

Честно говоря, я ожидал бы иметь одинаковое количество конфликтов, поскольку изменение в обеих ветвях приведет к конфликту, независимо от перебазирования или слияния. Другими словами, конфликт не вызван схождением ветвей в конце, он вызван параллельными изменениями одной и той же линии.

Ответ 1

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

Rebasing часто должен решить проблему выше. Также стоит упомянуть, что если вы хотите сжать до одного коммита, есть более простая стратегия, чем rebase.

Скажем, у вас есть 5 коммитов, которые вы хотите объединить в master, но это только одна функция, которую можно легко описать в одном коммите с описательным сообщением.

git fetch
git merge origin/master
git reset --soft origin/master
git commit

Если вам просто нужна одна фиксация, это проще и выполняется так же, как и перезагрузка.