You have read about "branching by abstraction," but you do not know what it means. You read that it is ideal when the coding you are doing cannot be done incrementally. How do you "branch by abstraction"?
It is a method of trunk-based development; instead of using a branch, you commit to the trunk (or main) branch of your repository. As you modify and develop a solution, you interact with an abstraction -- not the production code. To branch by abstraction, do the following:
- Create an abstraction over the part of the system that you need to change.
- Refactor the rest of the system to use the abstraction layer.
- Create a new implementation, which is not part of the production code path until complete.
- Update your abstraction layer to delegate to your new implementation.
- Remove the old implementation.
- Remove the abstraction layer if it is no longer appropriate.
(This solution was taken from page 350 of Continuous Delivery by Humble and Farley.)
See also these links:
This last external bullet/posting was authored by Paul Hammant. He was the person to coin the term "branch by abstraction" (according to page 350 of Continuous Delivery by Humble and Farley.)
To learn more about branching strategies in general, see this posting.