Почему мы должны избегать использования команды rebase на ветке, которая была нажата? - PullRequest
0 голосов
/ 27 января 2020

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

Ответы [ 2 ]

1 голос
/ 27 января 2020

Короче говоря, потому что rebase изменяет идентификаторы коммитов, это все равно что переписывать историю. Вот пример:

Скажем, у вас есть мастер, у которого есть коммиты А1 и А2.

>> git log master
 => A1, A2
>> git checkout -b mybranch 
>>> work..work..work
>> git commit mybranch
>>> work..work..work
>> git commit mybranch
// at this point mybranch contains A1, A2, A3, A4
>> git log mybranch
=> A1, A2, A3,A4


>> git push mybranch origin/mybranch

// now (its critical ! ) other users __checkout__ mybranch on their machines (and get commits A1, A2, A3, A4) of course
//////// 
// a couple of hours/days later ...
// ...meanwhile other people worked on master so now it looks like this:
>> git checkout master
>> git log
=> A1, A2, B1,B2 // commits B1 and B2 are new!!!
// and now let rebase:
>> git checkout mybranch
>> git rebase master
>> git log mybranch
=> A1, A2, B1, B2, A3', A4'

Обратите внимание, что в этот момент A3 стал A3 '(его sha1 изменился), и A4 перешло в A4 'Теперь вы можете принудительно создать эту историю sh (новая история, которая переписала историю с оригинальными коммитами A3 и A4). git push -- force mybranch

Однако, что будут делать ваши коллеги на этом этапе? Если они извлекают mybranch по git pull mybranch, должны ли они получить A3 и A3 '(то же самое относится и к A4 и A4')?

Это очень проблематично c, если только они не удаляют свою локальную копию из mybranch и вытащить, как будто никогда не существовало на своих локальных машинах.

0 голосов
/ 27 января 2020

Насколько я понимаю, не должно быть проблем с перебазированием, если вы единственный, кто работает в этой ветке. Может быть довольно много сложностей с перебазированием, если в этой ветке работает более одного человека.

В конце этой статьи есть простой пример, который мне очень помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...