diff options
-rw-r--r-- | Documentation/git-show-branches-script.txt | 69 | ||||
-rw-r--r-- | Documentation/git.txt | 2 | ||||
-rw-r--r-- | Makefile | 1 | ||||
-rwxr-xr-x | git-show-branches-script | 53 |
4 files changed, 125 insertions, 0 deletions
diff --git a/Documentation/git-show-branches-script.txt b/Documentation/git-show-branches-script.txt new file mode 100644 index 0000000000..95c7013445 --- /dev/null +++ b/Documentation/git-show-branches-script.txt @@ -0,0 +1,69 @@ +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 diff --git a/Documentation/git.txt b/Documentation/git.txt index 595033248b..8d7209bdfc 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -188,6 +188,8 @@ link:git-pull-script.html[git-pull-script]:: link:git-commit-script.html[git-commit-script]:: Record changes to the repository. +link:git-show-branches-script.html[git-show-branches-script]:: + Show branches and their commits. Ancilliary Commands ------------------- @@ -71,6 +71,7 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \ SCRIPTS += git-count-objects-script # SCRIPTS += git-send-email-script SCRIPTS += git-revert-script +SCRIPTS += git-show-branches-script PROG= git-update-cache git-diff-files git-init-db git-write-tree \ git-read-tree git-commit-tree git-cat-file git-fsck-cache \ diff --git a/git-show-branches-script b/git-show-branches-script new file mode 100755 index 0000000000..263025c476 --- /dev/null +++ b/git-show-branches-script @@ -0,0 +1,53 @@ +#!/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 |