Clean-up output from "git show-branch" and document it.
When showing only one branch a lot of default output becomes redundant, so clean it up a bit, and document what is shown. Retire the earlier implementation "git-show-branches-script". Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
f76412ed6d
commit
f5e375c9a9
107
Documentation/git-show-branch.txt
Normal file
107
Documentation/git-show-branch.txt
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
git-show-branch(1)
|
||||||
|
==================
|
||||||
|
v0.99.4, Aug 2005
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
git-show-branch - Show branches and their commits.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
--------
|
||||||
|
'git show-branch [--all] [--heads] [--tags] [--more=<n>] [--merge-base] <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/.
|
||||||
|
|
||||||
|
--all --heads --tags::
|
||||||
|
Show all refs under $GIT_DIR/refs, $GIT_DIR/refs/heads,
|
||||||
|
and $GIT_DIR/refs/tags, respectively.
|
||||||
|
|
||||||
|
--more=<n>::
|
||||||
|
Usually the command stops output upon showing the commit
|
||||||
|
that is the common ancestor of all the branches. This
|
||||||
|
flag tells the command to go <n> commits beyond that.
|
||||||
|
|
||||||
|
--merge-base::
|
||||||
|
Instead of showing the commit list, just act like the
|
||||||
|
'git-merge-base' command except that it can accept more
|
||||||
|
than two 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. Each commit shows a short name that
|
||||||
|
can be used as an exended SHA1 to name that commit.
|
||||||
|
|
||||||
|
The following example shows three branches, "master", "fixes"
|
||||||
|
and "mhf":
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git show-branch master fixes mhf
|
||||||
|
! [master] Add 'git show-branch'.
|
||||||
|
! [fixes] Introduce "reset type" flag to "git reset"
|
||||||
|
! [mhf] Allow "+remote:local" refspec to cause --force when fetching.
|
||||||
|
---
|
||||||
|
+ [mhf] Allow "+remote:local" refspec to cause --force when fetching.
|
||||||
|
+ [mhf~1] Use git-octopus when pulling more than one heads.
|
||||||
|
+ [fixes] Introduce "reset type" flag to "git reset"
|
||||||
|
+ [mhf~2] "git fetch --force".
|
||||||
|
+ [mhf~3] Use .git/remote/origin, not .git/branches/origin.
|
||||||
|
+ [mhf~4] Make "git pull" and "git fetch" default to origin
|
||||||
|
+ [mhf~5] Infamous 'octopus merge'
|
||||||
|
+ [mhf~6] Retire git-parse-remote.
|
||||||
|
+ [mhf~7] Multi-head fetch.
|
||||||
|
+ [mhf~8] Start adding the $GIT_DIR/remotes/ support.
|
||||||
|
+++ [master] Add 'git show-branch'.
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
These three branches all forked from a common commit, [master],
|
||||||
|
whose commit message is "Add 'git show-branch'. "fixes" branch
|
||||||
|
adds one commit 'Introduce "reset type"'. "mhf" branch has many
|
||||||
|
other commits.
|
||||||
|
|
||||||
|
When only one head is given, the output format changes slightly
|
||||||
|
to conserve space. The '+' sign to show which commit is
|
||||||
|
reachable from which head and the first N lines to show the list
|
||||||
|
of heads being displayed are both meaningless so they are
|
||||||
|
omitted. Also the label given to each commit does not repeat
|
||||||
|
the name of the branch because it is obvious.
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
$ git show-branch --more=4 master
|
||||||
|
[master] Add 'git show-branch'.
|
||||||
|
[~1] Add a new extended SHA1 syntax <name>~<num>
|
||||||
|
[~2] Fix "git-diff-script A B"
|
||||||
|
[~3] git-ls-files: generalized pathspecs
|
||||||
|
[~4] Make "git-ls-files" work in subdirectories
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
Author
|
||||||
|
------
|
||||||
|
Written by Junio C Hamano <junkio@cox.net>
|
||||||
|
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
--------------
|
||||||
|
Documentation by Junio C Hamano.
|
||||||
|
|
||||||
|
|
||||||
|
GIT
|
||||||
|
---
|
||||||
|
Part of the link:git.html[git] suite
|
@ -1,71 +0,0 @@
|
|||||||
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
|
|
@ -208,7 +208,7 @@ link:git-pull-script.html[git-pull-script]::
|
|||||||
link:git-commit-script.html[git-commit-script]::
|
link:git-commit-script.html[git-commit-script]::
|
||||||
Record changes to the repository.
|
Record changes to the repository.
|
||||||
|
|
||||||
link:git-show-branches-script.html[git-show-branches-script]::
|
link:git-show-branch.html[git-show-branch]::
|
||||||
Show branches and their commits.
|
Show branches and their commits.
|
||||||
|
|
||||||
link:git-repack-script.html[git-repack-script]::
|
link:git-repack-script.html[git-repack-script]::
|
||||||
|
1
Makefile
1
Makefile
@ -71,7 +71,6 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \
|
|||||||
SCRIPTS += git-count-objects-script
|
SCRIPTS += git-count-objects-script
|
||||||
# SCRIPTS += git-send-email-script
|
# SCRIPTS += git-send-email-script
|
||||||
SCRIPTS += git-revert-script
|
SCRIPTS += git-revert-script
|
||||||
SCRIPTS += git-show-branches-script
|
|
||||||
|
|
||||||
PROG= git-update-cache git-diff-files git-init-db git-write-tree \
|
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 \
|
git-read-tree git-commit-tree git-cat-file git-fsck-cache \
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Show refs and their recent commits.
|
|
||||||
#
|
|
||||||
|
|
||||||
. git-sh-setup-script || die "Not a git repository"
|
|
||||||
|
|
||||||
usage () {
|
|
||||||
die "usage: $0 <ref>..."
|
|
||||||
}
|
|
||||||
|
|
||||||
headref=`readlink $GIT_DIR/HEAD`
|
|
||||||
|
|
||||||
case "$(git-rev-parse --no-revs)" in '') ;; *) usage ;; esac
|
|
||||||
revs=$(git-rev-parse --revs-only --symbolic --no-flags "$@")
|
|
||||||
flags=$(git-rev-parse --revs-only --flags "$@")
|
|
||||||
case "$revs" in
|
|
||||||
'')
|
|
||||||
revs=$(git-rev-parse --symbolic --all | sed -ne 's|^refs/heads/||p' |
|
|
||||||
sort)
|
|
||||||
shift ;;
|
|
||||||
esac
|
|
||||||
set x $revs
|
|
||||||
shift
|
|
||||||
|
|
||||||
hh= in=
|
|
||||||
for ref
|
|
||||||
do
|
|
||||||
case "/$headref" in
|
|
||||||
*/"$ref") H='*' ;;
|
|
||||||
*) H='!' ;;
|
|
||||||
esac
|
|
||||||
h=`git-rev-parse --verify "$ref^0" 2>/dev/null` || continue
|
|
||||||
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 $flags $@ |
|
|
||||||
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
|
|
@ -223,6 +223,7 @@ int main(int ac, char **av)
|
|||||||
int head_path_len;
|
int head_path_len;
|
||||||
unsigned char head_sha1[20];
|
unsigned char head_sha1[20];
|
||||||
int merge_base = 0;
|
int merge_base = 0;
|
||||||
|
char **label;
|
||||||
|
|
||||||
while (1 < ac && av[1][0] == '-') {
|
while (1 < ac && av[1][0] == '-') {
|
||||||
char *arg = av[1];
|
char *arg = av[1];
|
||||||
@ -297,7 +298,8 @@ int main(int ac, char **av)
|
|||||||
if (merge_base)
|
if (merge_base)
|
||||||
return show_merge_base(seen, num_rev);
|
return show_merge_base(seen, num_rev);
|
||||||
|
|
||||||
if (1 < num_rev)
|
/* Show list */
|
||||||
|
if (1 < num_rev) {
|
||||||
for (i = 0; i < num_rev; i++) {
|
for (i = 0; i < num_rev; i++) {
|
||||||
int j;
|
int j;
|
||||||
int is_head = rev_is_head(head_path,
|
int is_head = rev_is_head(head_path,
|
||||||
@ -310,16 +312,28 @@ int main(int ac, char **av)
|
|||||||
printf("%c [%s] ", is_head ? '*' : '!', ref_name[i]);
|
printf("%c [%s] ", is_head ? '*' : '!', ref_name[i]);
|
||||||
show_one_commit(rev[i], NULL);
|
show_one_commit(rev[i], NULL);
|
||||||
}
|
}
|
||||||
|
for (i = 0; i < num_rev; i++)
|
||||||
|
putchar('-');
|
||||||
|
putchar('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
label = ref_name;
|
||||||
while (seen) {
|
while (seen) {
|
||||||
struct commit *commit = pop_one_commit(&seen);
|
struct commit *commit = pop_one_commit(&seen);
|
||||||
int this_flag = commit->object.flags;
|
int this_flag = commit->object.flags;
|
||||||
|
static char *obvious[] = { "" };
|
||||||
|
|
||||||
if ((this_flag & UNINTERESTING) && (--extra < 0))
|
if ((this_flag & UNINTERESTING) && (--extra < 0))
|
||||||
break;
|
break;
|
||||||
|
if (1 < num_rev) {
|
||||||
for (i = 0; i < num_rev; i++)
|
for (i = 0; i < num_rev; i++)
|
||||||
putchar((this_flag & (1u << (i + REV_SHIFT)))
|
putchar((this_flag & (1u << (i + REV_SHIFT)))
|
||||||
? '+' : ' ');
|
? '+' : ' ');
|
||||||
putchar(' ');
|
putchar(' ');
|
||||||
show_one_commit(commit, ref_name);
|
}
|
||||||
|
show_one_commit(commit, label);
|
||||||
|
if (num_rev == 1)
|
||||||
|
label = obvious;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user