Directed Acyclic Graph

Git stores its snapshots, the commits, in a directed acyclic graph. In the sense of git this means:

  • Commits are linked to their parent commits (directed)

  • A commit can not be a child of itself, directly or indirectly (acyclic)

Additionally:

  • A single commits can either have zero, one or two parents

  • But different commits can have the same parent

  • Only the first commit has no parent

        %%{init: { 'gitGraph': {'showBranches': false}} }%%
gitGraph
    commit id: "A"
    commit id: "B"
    commit id: "C"
    

Linear Graph

        %%{init: { 'gitGraph': {'showBranches': false}} }%%
gitGraph
    commit id: "A"
    commit id: "B"
    commit id: "C"
    branch dev
    commit id: "D"
    checkout main
    commit id: "E"
    

Forked Graph

        %%{init: { 'gitGraph': {'showBranches': false}} }%%
gitGraph
    commit id: "A"
    commit id: "B"
    commit id: "C"
    branch develop
    checkout develop
    commit id: "D"
    commit id: "E"
    checkout main
    merge develop id: "F"
    commit id: "G"
    

Merged Graph

        %%{init: { 'gitGraph': {'showBranches': false}} }%%
gitGraph
    commit id: "A"
    commit id: "B"
    commit id: "C"
    branch develop
    checkout develop
    commit id: "D"
    commit id: "E"
    branch feature
    checkout feature
    commit id: "F"
    checkout main
    commit id: "G"
    merge develop id: "H"
    merge feature id: "I"
    commit id: "J"
    

Merged Graph