Trunk
''Child branches'' are branches that have a parent; a branch without a parent is referred to as the ''trunk'' or the ''mainline''. The trunk is also sometimes loosely referred to as HEAD, but properly head refers not to a branch, but to the most recent commit on a given branch, and both the trunk and each named branch has its own head. The trunk is usually meant to be the base of a project on which development progresses. If developers are working exclusively on the trunk (so called trunk-based development), it always contains the latest cutting-edge version of the project, but therefore may also be the most unstable version. Another approach is to split a branch off the trunk, implement changes in that branch and merge the changes back into the trunk when the branch has proven to be stable and working. Depending on development mode and commit policy the trunk may contain the most stable or the least stable or something-in-between version. Other terms for trunk include ''baseline,'' ''mainline,'' and ''master,'' though in some cases these are used with similar but distinct senses – see . Often main developer work takes place in the trunk and stable versions are branched, and occasional bug-fixes are merged from branches to the trunk. When development of future versions is done in non-trunk branches, it is usually done for projects that do not change often, or where a change is expected to take a long time to develop until it will be ready for incorporating in the trunk.Merging
Branching 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''.Motivations for branching
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. Branches can also be used to implement vendor branching, a strategy to use, track and optionally modify source code that is published by external "upstream" parties ("vendors"). With this approach, fairly common since the CVS times, a separate branch is created to keep the vendor-provided code. This branch is updated with new upstream releases and merged into the main codebase when necessary.Development branch
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 theShadow or magic branches
In CVSNT, a ''shadow'' or ''magic'' branch "shadows" changes made in the upstream branch, to make it easier to maintain small changes (cvc is an open-source package building system incorporating a revision-control system for packages produced by rPath.)Distributed revision control
Repository clones
In distributed revision control, the entire repository, with branches, may be copied and worked on further. Monotone (mtn), Mercurial (hg) and git call it "clone";See also
*References
{{DEFAULTSORT:Branching (version control) Version control