\documentclass[a4paper,11pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}
\tikzset{
  tag/.style={
    rectangle,
    draw=black, very thick,
    text width=4em,
    minimum height=2em,
    text centered},
  commit/.style={
    circle,
    draw=black, very thick,
    text width=1em,
    minimum height=1em,
    text centered},
  point/.style={coordinate},
}
\begin{document}
\begin{tikzpicture}
  \matrix[row sep=10mm,column sep=4mm ] {
    % Top Row (feature branch)
    & \node [tag] (feature) {feature}; & \node[commit] (c2) {2}; & \node[commit] (c4) {4}; & \node[commit] (c5) {5}; & & &\\
    % Middle Row (trunk)
    \node [tag] (trunk) {trunk}; & \node[commit] (c1) {1}; & \node[commit] (c3) {3}; &  &  & \node[commit] (c8) {8}; & \node [point] (tend) {};\\
    % Bottom Row (feature branch 2)
    & & \node [tag] (feature2) {feature2}; & \node[commit] (c6) {6}; & \node[commit] (c7) {7}; &  & \node [point] (f2end) {}; & &\\
  };
  \begin{scope}[every node/.style={midway,auto,font=\scriptsize}]
    \draw [very thick, ->] (trunk) -- (c1) -- (c3) -- (c8) -- (tend);
    \draw [very thick, ->] (feature) -- (c2) -- (c4) -- (c5);
    \draw [very thick, ->] (feature2) -- (c6) -- (c7) -- (f2end);
    \draw [dashed, very thick, ->] (trunk) -- node {$branch$} (feature);
    \draw [dashed, very thick, ->] (c1) -- node {$branch$} (feature2);
    \draw [dashed, very thick, ->] (c1) -- node {$synch$} (c2);
    \draw [dashed, very thick, ->] (c3) -- node {$synch$} (c4);
    \draw [dashed, very thick, ->] (c5) -- node {$merge$} (c8);
    \draw [dashed, very thick, ->] (c3) -- node {$synch$} (c6);
  \end{scope}
\end{tikzpicture}
\end{document}