<P> In some distributed revision control systems, such as Darcs, there is no distinction made between repositories and branches; in these systems, fetching a copy of a repository is equivalent to branching . </P> <P> Branching also generally implies the ability to later merge or integrate changes back onto the parent branch . Often the changes are merged back to the trunk, even if this is not the parent branch . A branch not intended to be merged (e.g. because it has been relicensed under an incompatible license by a third party, or it attempts to serve a different purpose) is usually called a fork . </P> <P> Branches allow for parts of software to be developed in parallel . Large projects require many roles to be filled, including developers, build managers, and quality assurance personnel . Further, multiple releases on different operating system platforms may have to be maintained . Branches allow contributors to isolate changes without destabilizing the codebase, for example, fixes for bugs, new features, and versions integration . These changes may be later merged (resynchronized) after testing . </P> <P> A development branch or development tree of a piece of software is a version that is under development, and has not yet been officially released . In the open source community, the notion of release is typically metaphorical, since anyone can usually check out any desired version, whether it be in the development branch or not . Often, the version that will eventually become the next major version is called the development branch . However, there is often more than one subsequent version of the software under development at a given time . </P>

Branching is a technique generally used for in scm