Git Branch Colors
How two branch colors blend to create clear merge visualization.βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β THE MERGE LINE PROBLEM β
β β
β main (Blue) feature (Orange) β
β | | β
β | | β
β | merge commit | β
β |<------------------------+ β
β | ^ β
β | | β
β | What color should β
β v this line be? β
β β
β Option A: Use Blue (main's color) β
β Problem: Loses visual connection to feature β
β β
β Option B: Use Orange (feature's color) β
β Problem: Inconsistent with main's identity β
β β
β Option C: BLEND BOTH COLORS β
β Solution: Visual connection to both parents β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The sRGB Problem
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β BLENDING BLUE AND ORANGE IN sRGB β
β β
β Main (Blue): ββββββββββββββββββββ rgb(38, 136, 199) β
β Feature (Orange): ββββββββββββββββββ rgb(199, 136, 38) β
β β
β sRGB Midpoint: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β R = (38 + 199) / 2 = 118.5 β β
β β G = (136 + 136) / 2 = 136 β β
β β B = (199 + 38) / 2 = 118.5 β β
β β β β
β β Result: rgb(119, 136, 119) = Grayish-green β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Result: ββββββββββββββββββββ (muddy gray-green) β
β β
β main (vibrant) feature (vibrant) β
β | | β
β | +-------------+ | β
β |<---| MUDDY MIX |------+ β
β | | (dull) | β
β | +-------------+ β
β v β
β β
β The merge line looks "sick" compared to vibrant branches β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The OKLAB Solution
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β BLENDING BLUE AND ORANGE IN OKLAB β
β β
β Main (Blue): ββββββββββββββββββββ oklch(55% 0.15 230) β
β Feature (Orange): ββββββββββββββββββ oklch(55% 0.15 50) β
β β
β OKLAB Calculation: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Blue: L=0.55, a=-0.10, b=-0.11 β β
β β Orange: L=0.55, a= 0.10, b= 0.11 β β
β β β β
β β Mix at 50%: β β
β β L = 0.55 (same) β β
β β a = (-0.10 + 0.10) / 2 = 0.00 β β
β β b = (-0.11 + 0.11) / 2 = 0.00 β β
β β β β
β β Result: Neutral gray at 55% lightness β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Wait - this is also gray? β
β β
β YES, BUT: β
β βββββββββ β
β Blue and Orange are OPPOSITE on the color wheel (180 apart) β
β Their true midpoint IS mathematically neutral β
β β
β The difference: β
β - sRGB gray: Muddy, brownish-green, inconsistent lightness β
β - OKLAB gray: Clean neutral, consistent 55% lightness β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Non-Opposite Colors
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β WHERE OKLAB REALLY SHINES: NON-OPPOSITE COLORS β
β β
β Main (Blue): ββββββββββββββββββββ oklch(55% 0.15 230) β
β Hotfix (Red): ββββββββββββββββββββ oklch(55% 0.15 25) β
β β
β Hue difference: 230 - 25 = 205 degrees (NOT opposite) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β OKLAB midpoint: β β
β β β β
β β Result: A desaturated PURPLE-ish color β β
β β (Hue approximately 307 degrees) β β
β β β β
β β Compare to sRGB: β β
β β sRGB midpoint = Muddy brown-gray β β
β β OKLAB midpoint = Recognizable purple β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β main (blue) hotfix (red) β
β | | β
β | | β
β |<------- purple-ish -----+ β
β | (clean) β
β v β
β β
β The merge line is a recognizable intermediate hue! β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Golden Angle Branch Distribution
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β MAXIMUM BRANCH DISTINCTION WITH GOLDEN ANGLE β
β β
β Golden Angle = 137.5 degrees (from golden ratio) β
β No matter how many branches, they never cluster together β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Branch Index Hue Color β β
β β ββββββββββ βββββ βββ βββββ β β
β β main 0 0 Red β β
β β develop 1 137.5 Yellow-Green β β
β β feature-1 2 275 Blue-Purple β β
β β feature-2 3 52.5 Yellow-Orange β β
β β hotfix 4 190 Cyan β β
β β release 5 327.5 Pink-Red β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β β
β 0 deg (main) β
β * β
β / \ β
β / \ β
β 5 * * 3 (feature-2) β
β (release) 52.5 deg β
β / \ β
β / \ β
β 270 deg -------+-------------------+------- 90 deg β
β \ / β
β \ / β
β 2 * * 4 (hotfix) β
β (feature-1) 190 deg β
β 275 deg \ / β
β \ / β
β \ / β
β * β
β 1 (develop) β
β 137.5 deg β
β β
β Maximum separation between any two branches β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Merge Scenarios
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FEATURE INTO MAIN β
β ββββββββββββββββββ β
β β
β main: H=0 (Red) feature: H=275 (Blue-Purple) β
β β
β Hue difference: 275 degrees β
β Shorter path: 360 - 275 = 85 degrees β
β β
β main (red) β
β * β
β | β
β |<----- merge line (pink-ish) -----* feature (purple) β
β | β
β v β
β β
β The merge line is visually between both colors β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β HOTFIX INTO MAIN β
β βββββββββββββββββ β
β β
β main: H=0 (Red) hotfix: H=190 (Cyan) β
β β
β Hue difference: 190 degrees (close to opposite) β
β β
β main (red) β
β * β
β | β
β |<----- merge line (grayish) -----* hotfix (cyan) β
β | β
β v β
β β
β Near-opposite colors produce near-neutral merge β
β This is mathematically correct β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β DEVELOP INTO MAIN β
β ββββββββββββββββββ β
β β
β main: H=0 (Red) develop: H=137.5 (Yellow-Green) β
β β
β Hue difference: 137.5 degrees (not opposite) β
β β
β main (red) β
β * β
β | β
β |<----- merge line (yellow-ish) -----* develop (green) β
β | β
β v β
β β
β The merge line is a recognizable intermediate hue β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Merge Commit vs Merge Line
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β DISTINCTION β
β β
β Merge LINE: The arrow connecting parent to merge commit β
β Merge COMMIT: The node representing the merge itself β
β β
β parent1 parent2 β
β * * β
β \ / β
β \ <-- MERGE LINES --> / β
β \ (interpolated) / β
β \ / β
β \ / β
β \ / β
β +------*------+ β
β ^ β
β | β
β MERGE COMMIT β
β (target branch color) β
β β
β Color assignments: β
β βββββββββββββββββββ β
β Merge LINE from parent1: Blend of parent1 + target β
β Merge LINE from parent2: Blend of parent2 + target β
β Merge COMMIT: Target branch color (pure) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Many Branches
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SCALING STRATEGY β
β β
β βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ β
β β Branches β Strategy β β
β βββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββ€ β
β β 2-6 β Golden angle works perfectly β β
β β 7-12 β Golden angle still works β β
β β 13-20 β Colors may repeat, use groups β β
β β 20+ β Add patterns or icons β β
β βββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β HIERARCHICAL COLORING FOR MANY BRANCHES β
β β
β Tier 1: Branch Type (Hue Range) β
β βββββββββββββββββββββββββββββββ β
β main/master: Red area (0-30 deg) β
β develop: Green area (100-160 deg) β
β feature/*: Blue area (200-260 deg) β
β hotfix/*: Orange area (30-60 deg) β
β release/*: Purple area (270-330 deg) β
β β
β Tier 2: Within Group (Chroma/Lightness) β
β βββββββββββββββββββββββββββββββββββββββ β
β feature/auth: oklch(55% 0.15 220) β
β feature/ui: oklch(55% 0.12 230) <-- lower chroma β
β feature/api: oklch(60% 0.15 240) <-- higher lightness β
β feature/db: oklch(50% 0.15 250) <-- lower lightness β
β β
β Same type = same hue range β
β Different branches = vary chroma/lightness β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Takeaways
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SUMMARY β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β 1. Merge lines should BLEND both parent colors β β
β β Using target-only loses visual connection β β
β β β β
β β 2. OKLAB produces clean merge colors β β
β β No "muddy middle" problem β β
β β Opposite colors = clean neutral β β
β β Non-opposite colors = recognizable intermediate β β
β β β β
β β 3. Use 50% blend for equal parent weighting β β
β β Can adjust for visual emphasis β β
β β β β
β β 4. Golden angle (137.5 deg) maximizes distinction β β
β β Works well up to 12-15 branches β β
β β β β
β β 5. For many branches, use hierarchical coloring β β
β β Hue groups by type β β
β β Chroma/lightness variation within groups β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β When two branches merge, their colors should blend. β
β OKLAB ensures the merge line looks clean, not muddy. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ