В дополнение к suberg, ещё один пример: одиночный разработчик решил реализовать какую-то одну новую фичу, разработка которой займёт некоторое время. За то время, пока эта фича разрабатывается, может срочно понадобиться внести в стабильный код какие-нибудь багфиксы, не дожидаясь окончания работы над этой фичей, не добавляя в готовый продукт полуготовую версию фичи, и не откатываясь туда-сюда. А потом, когда фича готова и протестирована, просто влить её в основную. Это самый простейший пример, когда у нас две ветки, условные stable и development.
Ещё можно сразу над несколькими фичами работать и они могут находиться на разной стадии готовности, тогда тоже проще разнести по двум разным веткам, чтобы можно было добавить потом в основную ветку ту, которая раньше будет целиком готова, не дожидаясь доработки другой.