Самым распространенным соглашением для этого является использование функциональной ветви (или набора ветвей), которая находится в вашем хранилище - и, возможно, где-то в сети, например, GitHub или Gitorious.
Вы можете переименовывать и переписывать эту ветвь функций с разумной безнаказанностью, пока, наконец, она не будет готова к отправке исходных текстов любым подходящим для проекта способом. Это позволяет создавать и обмениваться незавершенным кодом без особой головной боли.
Попутно построение серии коммитов с последующим использованием интерактивной перебазировки (или других инструментов переписывания) для превращения их в другой набор чистых логических коммитов - отличный способ вовремя перейти от контрольных точек к контрольным точкам в функциональности - и работает лучше всего, если вы делаете это очень часто и очень маленькими частями.