Calling branches "branches" is misleading

  • hunk, fragmentchange
  • patch, commitchangen
  • patchset, branchchangenset
  • combined patchset or merged branch (combined or merged because of a shared change) → changennset

In terms of typical nomenclature, a patch (singular) consists of a number of changes to a number of files, and it may be useful to have a term that refers to these (typically semantically grouped) changes (plural), but that doesn’t deviate substantially from the term change, and can be suffixed with -set.

The term changes (plural) is ambiguous when suffixed with -set, and web searches for changes would tend to lose the distinction from change (whereas the distinction between patch and hunk/fragment is typically not ignored in search results). Instead, (using the old English masculine nominative/accusative -en pluralization) I propose the word changen (in lieu of patch or commit) to refer to a group of changes that you might semantically want to apply at the same time to maintain code consistency, and the word changenset (in lieu of changesset/patchset or branch) to refer to a set of (only partially ordered [for dependencies], unique) changens that, if semantic considerations were ignored, could be flattened (i.e., unioned) into a (semantically ambiguous) set of changes (i.e., changeset).

To (perhaps unnecessarily) extend the terminology for generically referring to a semantic hierarchy (even though, in the implementation, arbitrary metadata addresses the hierarchical distinctions and edge::EdgeFlags addresses the conflict distinctions), the term changenn could be used to refer to the additional layer of semantic grouping when a changen (e.g. a patch for changing an identifier consistently/atomically across the codebase) is (semantically) closely related to (and, for code consistency [slightly more generally], is to be applied at the same time as) another changen (e.g. a patch for changing a user interface apropos that identifier change), and then the term changennset could be used when a changenset (~patchset~branch) possibly could otherwise be considered as a combination of multiple separate changensets (~patchsets~branches) except for a shared changen (~patch~commit) that ties the changennset together like a bundle (e.g. when two feature branches share a few changes because the features themselves are related).

Obviously, for people coming from a different versioning system, having to map a term with a mental image (e.g. patch, branch) to a suffixed generic term (e.g. changen, changenset) would be a difficult transition, though having consistent terminology that maps well to a clear understanding of exactly how the commutativity and associativity turtles go all the way down to the intra-line edit may be worthwhile in the long run.