Показать статистику
0 голосов
от (1.7тыс. баллов)
Всем привет, вопрос по системе контроля версий Git. Вроде бы понятно что rebase может добавить текущую ветку в мастер. Документация так и объясняет назначение rebase. Однако в чем разница с merge?
1.3тыс. просмотров 1 ответов
от (4.6тыс. баллов)
0

Вообще то rebase - это альтернатива merge. Если я ничего не путаю концептуально, то всегда есть выбор - делать или rebase, или merge.  На уровне команд все довольно просто: 

git checkout some_new_stuff
git rebase master

То есть делаем чекаут на новой фиче какой то и далее ее добавляем в мастер через rebase.  Однако тут есть ключевой момент: команда rebase переписывают всю историю коммитов! Для каждого коммита в оригинальной ветке репозитория все коммиты будут сделаны заново. Так можно за собой тянуть какие то проблемные коммиты, которые merge мог бы исправить или по крайней мере уведомить о них. 

от (17.4тыс. баллов)
0

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

git rebase -i master

В итоге можно будет наблюдать нечто вроде: 

pick 01r5b7e Message for commit #1
fixup 7410e2d Message for commit #2
pick 4c57b63 Message for commit #3
от (4.5тыс. баллов)
0

Тут уже ответили в предыдущих комментариях, поэтому я лишь дополню предыдущие ответы. Основное отличие merge от rebase в том, что merge сохраняет историю коммитов, а rebase ее перезаписывает. В этом принципиальное отличие двух команд. 

Вот небольшой пример. Допустим, вы сделали кое-какие изменения в своей ветке (назовем ее "feature_branch") и теперь хотите что бы эти изменения появились в master ветке. Для этого выполним:

git status # что бы посмотреть текущий статус
git rebase --continue

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

git rebase -skip

Далее смотрим, будут ли еще какие то конфликты: 

git rebase --continue

И когда rebase завершится, выполните: 

git status
git log

На удаленное стороне могут быть какие то изменения. Если вы делаете rebase, то не выполняйте pull запрос, а вместо этого сделайте: 

git push -f

1 Ответ

0 голосов
от (17.4тыс. баллов)
В комментариях уже написали что делает команда. Тут главное понимать когда делать rebase, а когда выполнять merge. Если вы работаете с проектом самостоятельно (проект одного человека или что нибудь такое), то можно смело делать rebase, потому что коммиты будут переписаны (история коммитов), но для вас это роли не играет, т.к. зачем вам читать историю чужих коммитов.
Если же вы работаете в команде и ваши коммиты расшарены с другими, нужно делать merge что бы сохранить историю.
...