Вы правы, говоря, что это подрывает историю, которую хранит мерзавец, собирая вишню. Здесь нужно подумать, почему вы не хотите, чтобы предыдущие стабильные коммиты?
(примечание: если некоторые последующие коммиты вы еще не готовы портировать, вы, конечно, можете использовать git merge <commit-id>
, а не cherry-pick, чтобы сохранить историю чисто - будущие слияния также умны, чтобы не дублировать коммиты / Изменения)
Если вы не хотите их, потому что они не готовы к основной линии или не полностью протестированы, что дает вам уверенность в том, что желаемый коммит (который зависит от них и их состояния) готов?
Если это потому, что они не готовы к стабильной работе, и требуемый коммит не зависит от них, то вы не разветвляетесь так эффективно, как могли бы быть: этот коммит мог находиться в отдельной ветке тем (который содержит только коммиты, необходимые для интересующей вас функции), а затем, когда вы определили, что хорошо работать со стабильной версией, просто объедините эту ветку. Затем вы можете либо перебазировать ваши другие ветви, которым нужна эта функция, в стабильную версию, либо просто слить ветку функции в них (еще раз, git довольно умный здесь в отношении будущих слияний).
Требуется немного больше дисциплины, чтобы подумать о влиянии ваших коммитов, когда вы работаете (так как вы уже делаете коммиты рано и часто;), но это делает процесс ветвления / слияния намного проще - git checkout -b new-feature
ваш друг, чтобы быстро добавить коммит с другими, не связанными изменениями в середине работы в ветке темы (или git checkout -b new-feature master
, если вы особенно хорошо дисциплинированы и не имеете дополнительных изменений, висящих вокруг вашего рабочего дерева).