Git only
Git рекомендует использовать ветки для такого рода рабочих процессов.
В git очень дешёвые ветки, поэтому вы должны их широко использовать. То, что вы спрашиваете, называется «ветками тем», и это не что иное, как обычные ветки, но посвященные определенной теме (а не состоянию разработки).
С git вы должны сделать что-то вроде:
$ git clone ...
$ git branch
* master
$ git checkout -b taskA # Start working on task A
$ git branch
master
* taskA
$ <changes on task A>
$ git commit # This "saves" the work done on task A
$ git checkout master # Revert to the last stable state
$ git checkout -b taskB # Start working on task B
$ git branch
master
taskA
* taskB
$ <changes on task B>
$ git commit # "Save" the changes on task B
$ git checkout master # To revert to the last stable state
$ git checkout taskA # To continue working on task A
Это создаст историю, которая представляет ваши различные «рабочие пространства» с ветвями:
a -> b -> c # master
\
-> d -> e # Topic A
\
-> f -> g # Topic B <- HEAD
$ git branch
master
taskA
* taskB
Получив эту историю, вы можете объединить свои изменения с master (стабильная ветвь), а затем перенести вашу главную ветку в центральное хранилище.
Эта схема очень полезна, потому что вы можете работать над любой веткой тем, не нуждаясь в нескольких рабочих пространствах, и вы можете работать в любое время над любой заданной темой, всегда сохраняя историю изменений.
Вы можете вносить изменения в одни и те же файлы в разных ветках, при объединении одной ветви в другую git попытается объединить изменения, внесенные в файлы. Если возник конфликт из-за того, что вы изменили одну и ту же строку в двух разных местах, git уведомит вас о разрешении этого конкретного конфликта.
Также вы можете проверить git stash , чтобы узнать, как сохранить временные изменения, которые не могут быть зафиксированы в данный момент.
Чтение Рабочие процессы ветвления глава из Pro Git для получения дополнительной информации.