В конечном счете, решения о том, использовать ли рабочий процесс, ориентированный на слияние, рабочий процесс, ориентированный на ребаз, или какой-либо гибрид, то есть использовать оба варианта, выбирая тот, который основан на суждении, - это вопрос мнения и, ну, в общем, суждение. 1 Есть веские аргументы с обеих сторон. Вот две сторонние страницы мнений, одна от Кена Шидло в пользу перебазирования и одна, на которой перечислены аргументы с обеих сторон , а также страница учебника Atlassian о слиянии против перебазирования.
Что нужно знать о rebase, так это то, что он копирует (некоторые) коммиты. Если вы понимаете модель представления коммитов в Git как graph , 2 , то пример аргумента pro-rebase Кена Шидло покажет вам, что это значит: исходные коммиты B
и C
в:
B--C <-- feat
/
A--D--E <-- master
образно брошены волкам в пользу новых блестящих замен B'
и C'
:
B--C [abandoned]
/
A--D--E <-- master
\
B'-C' <-- feat
Заменив тускло-неприглядную старую цепочку B-C
на новую блестящую цепочку коммитов B'-C'
, новая ветвь функций теперь может быть легко встроена в master
с коммитом слияния или без него. Использование фиксации слияния - запуск git merge --no-ff feat
при включенном master
- дает вам этот график:
A--D--E------F <-- master
\ /
B'-C' <-- feat
, который помогает историку прийти в будущем (как только имя feat
будет стерто, что безопасно, так как F
помнит C'
и E
) и видит, что коммит pair , B'-C'
- вот что реализовало эту функцию. Имеет ли это значение по сравнению с более простым:
A--D--E--B'-C' <-- master
это отдельный вопрос. Но тот факт, что true оригинальных коммитов были B--C
, теряется в любом случае из-за перебазирования. Если этот факт важен по какой-то причине, то вы что-то потеряли, сделав ребазинг.
Это, в двух словах, аргумент против ребазирования: вы можете потерять какой-то важный бит истории. Аргумент про ребазу заключается в том, что эти биты истории не просто неважны , они активно мешают пониманию . Большая часть компьютерного программирования - это абстракция, а абстракция - это искусство удаления ненужных деталей . 3 . Это дает вам хорошее представление "большой картинки". Как только вы поймете, где вы сейчас находитесь и куда хотите идти, , а затем вы можете представить мелкие детали того, как вы попали сюда и как туда добраться. Если вы заблудились в куче подробностей и не знаете, где вы находитесь и куда идете, вам больше всего повезет с каким-то броуновским движением.
1 Это также верно в отношении того, следует ли произносить суждение с помощью дополнительного "е": http://grammarist.com/spelling/judgment-judgement/, https://www.dictionary.com/e/judgement-vs-judgment/
2 Если вы не , работайте по страницам в Думайте как (а) Git .
3 Это верно и для математики. Сама теория графов возникла из , удалив ненужные детали: Осознание Эйлером того, что все, что имело значение, - это мосты и массы земли. (См. Ссылку в сноске 2.)