here's the description of my everyday work:
Two developers working in many small features or fixes, let's say 3-4 per day for each developer. I need to be able to work on features A - B - C at the same time, while my coworker works on feature D and E.
Monday: Feature A is pushed to a staging server for client review. Feature B is pushed to the same staging server for client review. Feature D is pushed to the same staging server for client review.
Tuesday: We receive approval from the client for A and D (but not for B). And they need to go live with those changes immediately.
Wednesday: Feature C is pushed to the same staging server for client review. Approval for B is finally received.
Thursday: Feature B has to be pushed to production immediately.
Friday: An error is discovered in the last production release and we need to roll back to the previous version.
This can't be treated as a Scrum-like process because there's no chance of grouping features into Stories or sprint planning. This is more like a maintenance process (maybe Kanban?).
Can you give an example of how you would handle this using Git? Assume that right now, we have only one master branch and whenever we want to push anything to staging or production, we have to "git pull" making all changes live (even the unwanted ones). What about git "cherry-pick" to retrieve specific commits? One branch per feature seems too onerous as we have too many features. If you could give specific examples of Git commands and branches (only to show the main idea, don't need to be 100% correct) that would be great.
Thanks.