--- /dev/null
+git-show-branches-script(1)
+===========================
+v0.99.4, Aug 2005
+
+NAME
+----
+git-show-branches-script - Show branches and their commits.
+
+SYNOPSIS
+--------
+'git show-branches <reference>...'
+
+DESCRIPTION
+-----------
+Shows the head commits from the named <reference> (or all refs under
+$GIT_DIR/refs/heads), and displays concise list of commit logs
+to show their relationship semi-visually.
+
+OPTIONS
+-------
+<reference>::
+ Name of the reference under $GIT_DIR/refs/heads/.
+
+
+OUTPUT
+------
+Given N <references>, the first N lines are the one-line
+description from their commit message. The branch head that is
+pointed at by $GIT_DIR/HEAD is prefixed with an asterisk '*'
+character while other heads are prefixed with a '!' character.
+
+Following these N lines, one-line log for each commit is
+displayed, indented N places. If a commit is on the I-th
+branch, the I-th indentation character shows a '+' sign;
+otherwise it shows a space.
+
+The following example shows three branches, "pu", "master" and
+"rc":
+
+ * [pu] Add cheap local clone '-s' flag to git-clone-script
+ ! [master] Documentation updates.
+ ! [rc] Merge master into rc
+ + Add cheap local clone '-s' flag to git-clone-script
+ + Alternate object pool mechanism updates.
+ + Audit rev-parse users.
+ ++ Documentation updates.
+ + Merge master into rc
+ +++ [PATCH] plug memory leak in diff.c::diff_free_filepair()
+
+These three branches all forked from a common commit, "[PATCH]
+plug memory leak...", and "rc" has one commit ahead of it. The
+"master" branch has one different commit that is also shared by
+"pu" branch, and "pu" branch has three more commits on top of
+"master" branch.
+
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+
+Documentation
+--------------
+Documentation by Junio C Hamano.
+
+
+GIT
+---
+Part of the link:git.html[git] suite
--- /dev/null
+#!/bin/sh
+#
+# Show refs and their recent commits.
+#
+
+. git-sh-setup-script || die "Not a git repository"
+
+headref=`readlink $GIT_DIR/HEAD`
+case "$#" in
+0)
+ set x `cd $GIT_DIR/refs &&
+ find heads -type f -print |
+ sed -e 's|heads/||' |
+ sort`
+ shift ;;
+esac
+
+hh= in=
+for ref
+do
+ case "/$headref" in
+ */"$ref") H='*' ;;
+ *) H='!' ;;
+ esac
+ h=`git-rev-parse --verify "$ref^0"` || exit
+ l=`git-log-script --max-count=1 --pretty=oneline "$h" |
+ sed -e 's/^[^ ]* //'`
+ hh="$hh $h"
+ echo "$in$H [$ref] $l"
+ in="$in "
+done
+set x $hh
+shift
+
+git-rev-list --pretty=oneline "$@" |
+while read v l
+do
+ in=''
+ for h
+ do
+ b=`git-merge-base $h $v`
+ case "$b" in
+ $v) in="$in+" ;;
+ *) in="$in " ;;
+ esac
+ done
+
+ echo "$in $l"
+ case "$in" in
+ *' '*) ;;
+ *) break ;;
+ esac
+done