\begin{frame}[squeeze]{Moving Changesets Around}
  \tikzstyle{rev}+=[on chain, minimum size=6mm]
  \tikzset{node distance=10mm and 12mm, on grid}

  Tired of all those merges? Use the \ext{rebase} extension!
  \begin{itemize}
  \item Revision graph:\strut

    \begin{tikzpicture}[start chain]
      \node[rev, join] {$A$};
      \node[rev, join] {$B$};
      \node[rev, join] {$C$};
      \begin{scope}[start branch=pulled]
        \node<3->[rev, join=by join-sw, on chain=going below right] {$X$};
        \node<3->[rev, join] {$Y$};
        \node<3->[rev, join] {$Z$};
      \end{scope}
      \node<2->[rev, join] {$D$};
      \node<2->[rev, join] {$E$};
    \end{tikzpicture}

  \item<4-> Merge:\strut

    \begin{tikzpicture}[start chain]
      \node[rev, join] {$A$};
      \node[rev, join] {$B$};
      \node[rev, join] {$C$};
      \begin{scope}[start branch=pulled]
        \node[rev, join=by join-sw, on chain=going below right] {$X$};
        \node[rev, join] {$Y$};
        \node[rev, join] {$Z$};
      \end{scope}
      \node[rev, join] {$D$};
      \node[rev, join] {$E$};
      \begin{scope}[continue branch=pulled]
        \node[rev,on chain=going above right,join=by join-es, join=with chain-end] {$M$};
      \end{scope}
    \end{tikzpicture}

  \item<5-> Rebase:\strut

    \begin{tikzpicture}[start chain]
      \node[rev, join] {$A$};
      \node[rev, join] {$B$};
      \node[rev, join] {$C$};
      \begin{scope}[start branch=pulled]
        \node[rev, join=by join-sw, on chain=going below right] {$X$};
        \node[rev, join] {$Y$};
        \node[rev, join] {$Z$};
        \node[rev, join] {$D'$};
        \node[rev, join] {$E'$};
      \end{scope}
      \node[rev,join=by {black!30!white},opacity=0.3] {$D$};
      \node[rev,join=by {black!30!white},opacity=0.3] {$E$};
    \end{tikzpicture}

  \item<6-> Beware: public changes should never be rebased.
  \end{itemize}
\end{frame}
