Конфликт все еще использует git merge? Интернет-компании используют git rebase

Git

Разница между git merge и git rebase

Цель состоит в том, чтобы объединить коммиты из одной ветки в другую ветку.

git merge

  1. Создайте новый проект на gitlab и загрузите в него тестовый файл.

image.png2. Измените тестовый файл локально, чтобы сделать две фиксации, и добавьте предложение в файл для каждой фиксации.

image.png

image.png

image.png3. Изменять файлы и коммитить прямо в удаленном хранилище, имитируя коммиты других разработчиков

image.png

image.png

4. Если я в это время пропущу локальный коммит на удалённый, он будет отклонен, потому что у удалённого и локального уже есть свои коммиты.Наша обычная практика — git pull, разрешить конфликт локально, а потом продолжать пушить , по сути, git pull = git fetch + git merge

Возникает конфликт:

image.png image.png

Разрешение конфликтов:

image.png

Повторно добавьте фиксацию, а затем нажмите, вы можете видеть, что слияние должно рассматриваться как новая фиксация:image.png

git rebase

Если мы сейчас используем git pull --rebase, то есть = git fetch + git rebase

  1. То же, что и локальная фиксация 2 раза, удаленная фиксация 2 раза

image.png

image.png

  1. Вы можете видеть, что git pull --rebase по-прежнему будет предлагать нам разобраться с конфликтами, но по логу git видно, что rebase явно произошел, то есть rebase, локальная ветка основана на последнем удаленном коммите, а не последний раз локальный коммит

image.png

image.png

  1. Чтобы справиться с конфликтами, после обработки каждого конфликта локальной фиксации используйте git add, чтобы отметить, что конфликт был обработан, используйте git rebase --continue, чтобы продолжить обработку следующей локальной фиксации, или используйте git rebase -i, чтобы объединить локальную фиксацию в сначала один коммит. Таким образом, git pull --rebase обрабатывает все конфликты сразу

image.png

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

image.png