Overlap
The Overlap Column in SmartGit is an optional column for the Graph View visualizing similarity between commits using symbols and tooltips to do so.
It is active for the feature branch when using Git-Flow or Git-Flow Light, and displays the dependencies between the commits in the feature branch, as well as the dependencies of these commits to the commits in the develop branch which are ahead of the feature branch.
Usage
The Overlap Column provides a quick overview of the dependencies between commits, without having to examine all the commits in detail. Overlap analysis includes collapsed commits when using Compacted my branches in the graph scope selector.
It can be thought of as an additional dimension in the Graph View that visualizes dependencies between commits which go beyond the strict dependency imposed by the commit graph itself.
Select one or more commits in the Graph View to use them as the overlap focus. Hover over another commit’s symbol to see how it overlaps with the focused commits.
Click a focused commit’s symbol to fix the focus while you select other commits. To change the fixed focus, click another commit’s symbol. If that commit belongs to the current graph selection, all selected commits become the focus. Click a focused commit’s symbol again to let the focus follow the graph selection. Changing HEAD also releases the fixed focus.
The Overlap Column can help answer questions such as:
- When reordering commits in a feature branch, where are conflicts likely to occur?
- Which commits should probably be squashed?
- Which commits have unexpected dependencies and are therefore prime candidates for splitting up?
- Which file is causing the most conflicts when finishing the branch?
- Is the branch ready for review, or are there still commits reverting earlier changes?
- Does the branch consist of separate changes that could be handled as separate features instead?
Types of Overlap
| Icon | Type | Description |
|---|---|---|
| Identity | This commit is part of the overlap focus, which follows the graph selection. | |
| Identity Fixed | This commit is part of the fixed overlap focus. | |
| Pending | Overlap calculation is pending. | |
| None | This commit and the focused commit have no modified files in common. | |
| Slight | This commit modifies files in the focused commit, but compared to the total number of files modified, there is only a small overlap. | |
| Heavy / Superset | This commit modifies files in the focused commit, and compared to the total number of files modified, there is a lot of overlap. Superset is a special form of Heavy where the files modified in this commit are a superset of the files modified in the focused commit. | |
| Equal Set | This commit and the focused commit modify exactly the same files. A separate icon for Equal Set is only available if log.graph.overlap.useEqualSetIcon is set to true. Otherwise, the Heavy icon is used instead. |
|
| Subset | The files modified in this commit are a subset of the files modified in the focused commit. A separate icon for Subset is only available if log.graph.overlap.useSubsetIcon is set to true. Otherwise, the Heavy icon is used instead. |
|
| Shared | The commits have at least one modification in the same place. Effectively this means that the commits usually can’t simply be re-ordered in the feature branch. | |
| Conflict | There will likely be a conflict with this commit when trying to rebase the feature branch onto the current develop, because they modify the same file at the same place. | |
| Skipped | Overlap calculation was skipped. | |
| Error | There was an error determining the overlap status. See the tooltip for details. |
Configuration
The Overlap Column can be enabled and disabled as described in Graph View. Additionally, there are a few Low-Level Properties to customize it:
log.graph.overlap.enabled- set tofalseto disable the overlap feature completelycommitnet.overlap.baseCommits- the number of additional base commits to calculate overlap information. It defaults to100, but it will never exceedlog.graph.overlap.maxCommits.log.graph.overlap.cacheSize- sets the number of cached branches. Set to1to effectively disable the cache.log.graph.overlap.intersectionThreshold- adjusts the threshold at which an overlap is classified as Heavy versus Slight.log.graph.overlap.maxCommits- the maximum number of commits for which the overlap is calculated.log.graph.overlap.maxDiffSize- the maximum size of commit diffs for overlap tooltips in bytes. It defaults to128000000bytes and can be increased up to1024000000bytes.log.graph.overlap.maxTooltipFilenames- the maximum number of filenames displayed in tooltips.log.graph.overlap.useEqualSetIcon- set totrueto display a separate icon for equal set overlap.log.graph.overlap.useSubsetIcon- set totrueto display a separate icon for subset overlap.
Note
A file rename without content changes can produce Shared or Conflict indicators with commits that change the same file.
Overlap analysis bypasses external diff helpers configured through Git’s diff.external setting.