Разница между git merge и git rebase
Цель состоит в том, чтобы объединить коммиты из одной ветки в другую ветку.
git merge
- Создайте новый проект на gitlab и загрузите в него тестовый файл.
2. Измените тестовый файл локально, чтобы сделать две фиксации, и добавьте предложение в файл для каждой фиксации.
3. Изменять файлы и коммитить прямо в удаленном хранилище, имитируя коммиты других разработчиков
4. Если я в это время пропущу локальный коммит на удалённый, он будет отклонен, потому что у удалённого и локального уже есть свои коммиты.Наша обычная практика — git pull, разрешить конфликт локально, а потом продолжать пушить , по сути, git pull = git fetch + git merge
Возникает конфликт:
Разрешение конфликтов:
Повторно добавьте фиксацию, а затем нажмите, вы можете видеть, что слияние должно рассматриваться как новая фиксация:
git rebase
Если мы сейчас используем git pull --rebase, то есть = git fetch + git rebase
- То же, что и локальная фиксация 2 раза, удаленная фиксация 2 раза
- Вы можете видеть, что git pull --rebase по-прежнему будет предлагать нам разобраться с конфликтами, но по логу git видно, что rebase явно произошел, то есть rebase, локальная ветка основана на последнем удаленном коммите, а не последний раз локальный коммит
- Чтобы справиться с конфликтами, после обработки каждого конфликта локальной фиксации используйте git add, чтобы отметить, что конфликт был обработан, используйте git rebase --continue, чтобы продолжить обработку следующей локальной фиксации, или используйте git rebase -i, чтобы объединить локальную фиксацию в сначала один коммит. Таким образом, git pull --rebase обрабатывает все конфликты сразу
- После пуша на удаленку на диаграмме ветвей хорошо видно, что отличие от слияния в том, что rebase не будет генерировать ветки и не будет генерировать новые коммиты.