Если вы коммит sh, это не имеет большого значения, перебазируете ли вы или объединяете. Они будут производить идентичные деревья, потому что изменения будут одинаковыми. Если вы используете полнофункциональный сервер Git, такой как GitHub, вы обнаружите, что рабочий процесс squa sh называется "squa sh and merge", но его поведение идентично.
Как вы заметили, вы не можете раздавить преимущество, заключающееся в том, что вы можете с большой точностью разделить изменения, которые привели к ошибке. Тем не менее, вы также можете сделать это с обычным рабочим процессом слияния, который не равно sh, потому что git bisect
прекрасно знает, как обрабатывать коммиты слияния.
Для того, чтобы получить реальную выгоду от этого дополнительного история, как правило, вы должны иметь рабочий процесс, который имеет здравые, логичные, делимые на коммиты коммиты. Если у вас есть много того, что мы называем «фиксацией коммитов», которые исправляют синтаксические ошибки или другие ошибки и не применяют вменяемые, логические коммиты, тогда git bisect
будет сложнее отследить проблемный c коммит, потому что некоторые коммиты даже не будет строить. Таким образом, вы должны применять эту политику при проверке кода и, возможно, даже в CI, если хотите принять ее. Вместо этого преимущество сжатия заключается в том, что разработчики могут быть ленивыми, но за счет потенциально огромных, непостижимых дампов кода в виде отдельных коммитов.
При работе с Git мы действительно часто используем git bisect
для отслеживания вниз проблемат c фиксирует. Я также использовал его на прежнем рабочем месте, чтобы отследить, где мы ввели регрессии, так что это широко используемый подход. Тем не менее, некоторые проекты не заботятся о том, где что-то сломалось, и не используют возвраты, поэтому они не используют git bisect
. Это зависит от вашего проекта и рабочего процесса, а также от культуры вашей команды.
После того, как я увидел подход, работа должна требовать либо вменяемых, логических, делимых коммитов, либо раздавливания. Если вы осторожный, методичный разработчик, который готов сделать ребаз и получить коммиты прямо перед слиянием, то вы можете слить их сразу; если ты хочешь быть ленивым, тогда тебе нужно набраться sh. Это сохраняет возможность деления на ветви, облегчая работу менее требовательным разработчикам. Этот подход также может быть реализован с помощью rebase, если вы предпочитаете.
Мой общий подход - это подход Git (который не должен вызывать удивления, потому что я участвую в Git): функция rebase переходит в вменяемые, логические коммиты, а затем создать коммит слияния. Но в конечном итоге вы должны выбрать рабочий процесс, который работает для вашей команды.