Каковы преимущества перебазирования перед слиянием в git? - PullRequest
17 голосов
/ 20 мая 2010

В этой статье автор объясняет перебазирование этой схемой:

enter image description here

Rebase: Если вы еще не опубликовали свой филиал, или четко связались что другие не должны основывать свою работу на это у вас есть альтернатива. Вы можете перебазировать свою ветку, где вместо слияния, ваш коммит заменяется другой коммит с другим родитель, и ваша ветка перемещена есть.

тогда как нормальное слияние выглядело бы так:

enter image description here

Итак, если вы выполнили ребазинг , вы просто теряете историческое состояние (которое будет собирать мусор в будущем). Итак, зачем кому-то вообще делать ребаз? Чего мне здесь не хватает?

Ответы [ 2 ]

33 голосов
/ 20 мая 2010

Существуют различные ситуации, в которых вы можете захотеть сделать ребаз.

  • Вы разрабатываете несколько частей функции в отдельных ветвях, а затем понимаете, что в действительности они представляют собой линейную последовательность идей. Перебазируйте их в эту конфигурацию.

  • Вы разворачиваете тему не с того места. Может быть, это слишком рано (вам нужно что-то позднее), может быть, слишком поздно (на самом деле это относится и к предыдущим версиям). Переместите его в нужное место. «Слишком поздний» случай фактически не может быть исправлен слиянием, поэтому ребаз является критическим.

  • Вы хотите проверить взаимодействие ветви с другой веткой, но по какой-то причине не хотите объединяться. Например, вы можете захотеть увидеть, какие конфликты возникают при фиксации за коммитом, а не за все сразу.

Общая тема здесь заключается в том, что чрезмерное слияние загромождает историю, а перебазирование - это способ избежать этого, если вы сначала не получили правильный план ветвления / слияния. Слишком много слияний может затруднить отслеживание истории человеком, а также затруднить использование таких инструментов, как git-bisect.

Есть также много случаев, которые вызывают интерактивный перебаз:

  • Несколько коммитов должны были быть одним коммитом.

  • Коммит (не текущий) должен был быть несколькими коммитами.

  • В коммите (не текущем) произошла ошибка в нем или его сообщении.

  • Необходимо удалить коммит (не текущий).

  • Комитеты должны быть переупорядочены (например, для более логичной передачи).

Хотя это правда, что вы «теряете историю», делая это, реальность такова, что вы хотите публиковать только чистые работы. Если что-то еще не опубликовано, можно перебазировать его, чтобы преобразовать в способ, которым вы должны были зафиксировать это. Это означает, что окончательная версия в общедоступном репозитории будет логичной и легкой для понимания, без сохранения каких-либо ошибок, которые имел разработчик на этом пути.

2 голосов
/ 20 мая 2010

Ребазинг позволяет подобрать слияния в нужном порядке. Теория слияния означает, что вам не нужно беспокоиться об этом. Реальность разрешения сложных конфликтов становится проще, если перебазировать, а затем объединить новые изменения по порядку.

Возможно, вы захотите прочитать о Bunny Hopping

...