======= Merge ======= Initialize Git repository and VB for test:: $ git init Initialized empty Git repository in * (glob) $ touch README.txt $ git add . $ git commit --message 'First commit' > /dev/null $ vb init $ git branch first # for later use Do some edit at branch-a:: $ vb checkout branch-a $ cd .vb/branch-a $ echo 'edit (a)' > file-a.txt $ git add . $ git commit --message 'Second commit' > /dev/null $ cd ../.. Do some edit at branch-b, also:: $ vb checkout branch-b $ cd .vb/branch-b $ echo 'edit (b)' > file-b.txt $ git add . $ git commit --message 'Different second commit' > /dev/null $ cd ../.. Merging two branches:: $ vb merge branch-a branch-b $ cat file-*.txt edit (a) edit (b) Let's do some edit at branch-a:: $ cd .vb/branch-a $ echo 'changed (a)' > file-a.txt $ git commit --all --message 'Third commit' > /dev/null $ cd ../.. ... and then merge again:: $ vb merge branch-a branch-b $ cat file-*.txt changed (a) edit (b) At this point, you have commit tree like this:: $ git log --graph --pretty='format:%s%d' * Merge branches 'branch-a' and 'branch-b' (HEAD, master) |\ | * Third commit (branch-a) * | Merge branches 'branch-a' and 'branch-b' |\ \ | |/ |/| | * Different second commit (branch-b) * | Second commit |/ * First commit (first) (no-eol) Running ``vb merge`` again and again could make the branch full of merge commits. To avoid that, you can run ``vb merge --reset REFSPEC`` to reset the branch to the point specified by ``REFSPEC``:: $ vb merge --reset first branch-a branch-b $ git log --graph --pretty='format:%s%d' * Merge branches 'branch-a' and 'branch-b' (HEAD, master) |\ | * Different second commit (branch-b) * | Third commit (branch-a) * | Second commit |/ * First commit (first) (no-eol) If ``vb merge --reset`` creates different result comparing to simple ``vb merge``, the branch created by ``vb merge`` locates at ``BRANCH.old`` so that you can examine it before completely removing it:: $ echo 'change' > README.txt $ git commit --all --message 'Forth commit' > /dev/null $ vb merge --reset first branch-a branch-b WARNING Re-merging produces different result. Check: git diff master.old $ git diff master.old diff --git a/README.txt b/README.txt index * (glob) --- a/README.txt +++ b/README.txt @@ -1 +0,0 @@ -change