Version control (source code)

= Version control

<Version control> records identifiable revisions of files and their history, making it possible to inspect an earlier state and determine what changed. A <version-control commit> records a revision; a <version-control branch> permits a line of development to proceed alongside another; <version-control merging> combines changes and exposes conflicts requiring a decision. These operations make collaboration and investigation of <software regressions> practical.<Pro Git by Scott Chacon and Ben Straub>[Second edition, sections 1.1, 2.3 and 3.2]{ref}

Suppose a <numerical simulation> produced an unexpected result after a formula changed. Recording the <version-control commit> with the result identifies the exact source revision, so the old and new formulas can be compared and rerun with the same inputs. Reproducing the full calculation also requires the relevant data, <software dependencies> and execution settings: file history is one part of that record.