digraph {
    compound = true
    node [shape = "box", style = "filled, rounded"]
    nodesep = 0.5
    ranksep = 1.5

    subgraph clusterorigin {
        label = "origin"

        node [color = orchid]

        omain[label = "main"]
    }

    subgraph clusterlocal {
        label = "local"

        node [color = orchid]

        main[label = "main"]
    }

    omain -> main [label = "git fetch", style = dotted, ltail = clusterorigin, lhead = clusterlocal]
    main -> omain [label = "git push"]
    omain -> main [label = "git pull"]
}