From ebedc3195258a6382f58c8c6b54b21db922440af Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 11 Jan 2006 14:02:38 -0800 Subject: [PATCH] show-branch: make the current branch and merge commits stand out. This changes the character used to mark the commits that is on the branch from '+' to '*' for the current branch, to make it stand out. Also we show '-' for merge commits. When you have a handful branches with relatively long diversion, it is easier to see which one is the current branch this way. Signed-off-by: Junio C Hamano --- Documentation/git-show-branch.txt | 15 +++--- Documentation/howto/revert-branch-rebase.txt | 24 +++++----- Documentation/tutorial.txt | 49 ++++++++++---------- show-branch.c | 19 ++++++-- t/t1200-tutorial.sh | 6 +-- 5 files changed, 64 insertions(+), 49 deletions(-) diff --git a/Documentation/git-show-branch.txt b/Documentation/git-show-branch.txt index 9cc44a816..4bef4767e 100644 --- a/Documentation/git-show-branch.txt +++ b/Documentation/git-show-branch.txt @@ -81,13 +81,14 @@ OUTPUT ------ Given N , 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. +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 +branch, the I-th indentation character shows a `+` sign; +otherwise it shows a space. Merge commits are denoted by +a `-` sign. Each commit shows a short name that can be used as an extended SHA1 to name that commit. The following example shows three branches, "master", "fixes" @@ -95,7 +96,7 @@ and "mhf": ------------------------------------------------ $ git show-branch master fixes mhf -! [master] Add 'git show-branch'. +* [master] Add 'git show-branch'. ! [fixes] Introduce "reset type" flag to "git reset" ! [mhf] Allow "+remote:local" refspec to cause --force when fetching. --- @@ -109,13 +110,13 @@ $ git show-branch master fixes mhf + [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'. +*++ [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. +other commits. The current branch is "master". EXAMPLE diff --git a/Documentation/howto/revert-branch-rebase.txt b/Documentation/howto/revert-branch-rebase.txt index 5a7e0cfe0..d10476b56 100644 --- a/Documentation/howto/revert-branch-rebase.txt +++ b/Documentation/howto/revert-branch-rebase.txt @@ -32,16 +32,16 @@ merge introduced 5 commits or so: ------------------------------------------------ $ git show-branch --more=4 master master^2 | head -! [master] Merge refs/heads/portable from http://www.cs.berkeley.... +* [master] Merge refs/heads/portable from http://www.cs.berkeley.... ! [master^2] Replace C99 array initializers with code. -- -+ [master] Merge refs/heads/portable from http://www.cs.berkeley.... -++ [master^2] Replace C99 array initializers with code. -++ [master^2~1] Replace unsetenv() and setenv() with older putenv(). -++ [master^2~2] Include sys/time.h in daemon.c. -++ [master^2~3] Fix ?: statements. -++ [master^2~4] Replace zero-length array decls with []. -+ [master~1] tutorial note about git branch +- [master] Merge refs/heads/portable from http://www.cs.berkeley.... +*+ [master^2] Replace C99 array initializers with code. +*+ [master^2~1] Replace unsetenv() and setenv() with older putenv(). +*+ [master^2~2] Include sys/time.h in daemon.c. +*+ [master^2~3] Fix ?: statements. +*+ [master^2~4] Replace zero-length array decls with []. +* [master~1] tutorial note about git branch ------------------------------------------------ The '--more=4' above means "after we reach the merge base of refs, @@ -193,8 +193,8 @@ $ git show-branch --more=1 master pu rc + [pu~4] Document "git cherry-pick" and "git revert" + [pu~5] Remove git-apply-patch-script. + [pu~6] Redo "revert" using three-way merge machinery. - + [rc] Merge refs/heads/master from . -+++ [master] Revert "Replace zero-length array decls with []." - + [rc~1] Merge refs/heads/master from . -+++ [master~1] Merge refs/heads/portable from http://www.cs.berkeley.... + - [rc] Merge refs/heads/master from . +++* [master] Revert "Replace zero-length array decls with []." + - [rc~1] Merge refs/heads/master from . +... [master~1] Merge refs/heads/portable from http://www.cs.berkeley.... ------------------------------------------------ diff --git a/Documentation/tutorial.txt b/Documentation/tutorial.txt index edd91cbbe..b8fa29992 100644 --- a/Documentation/tutorial.txt +++ b/Documentation/tutorial.txt @@ -968,8 +968,8 @@ $ git show-branch master mybranch * [master] Merge work in mybranch ! [mybranch] Some work. -- -+ [master] Merge work in mybranch -++ [mybranch] Some work. +- [master] Merge work in mybranch +*+ [mybranch] Some work. ------------------------------------------------ The first two lines indicate that it is showing the two branches @@ -979,7 +979,8 @@ top-of-the-tree commits, you are currently on `master` branch the later output lines is used to show commits contained in the `master` branch, and the second column for the `mybranch` branch. Three commits are shown along with their log messages. -All of them have plus `+` characters in the first column, which +All of them have non blank characters in the first column (`*` +shows an ordinary commit on the current branch, `.` is a merge commit), which means they are now part of the `master` branch. Only the "Some work" commit has the plus `+` character in the second column, because `mybranch` has not been merged to incorporate these @@ -1024,7 +1025,7 @@ $ git show-branch master mybranch ! [master] Merge work in mybranch * [mybranch] Merge work in mybranch -- -++ [master] Merge work in mybranch +-- [master] Merge work in mybranch ------------------------------------------------ @@ -1199,9 +1200,9 @@ $ git show-branch --more=3 master mybranch ! [master] Merge work in mybranch * [mybranch] Merge work in mybranch -- -++ [master] Merge work in mybranch -++ [master^2] Some work. -++ [master^] Some fun. +-- [master] Merge work in mybranch ++* [master^2] Some work. ++* [master^] Some fun. ------------ Remember, before running `git merge`, our `master` head was at @@ -1223,8 +1224,8 @@ $ git show-branch ! [mybranch] Some work. -- + [mybranch] Some work. -+ [master] Some fun. -++ [mybranch^] New day. +* [master] Some fun. +*+ [mybranch^] New day. ------------ Now we are ready to experiment with the merge by hand. @@ -1743,8 +1744,8 @@ $ git show-branch + [diff-fix] Fix rename detection. + [diff-fix~1] Better common substring algorithm. + [commit-fix] Fix commit message normalization. - + [master] Release candidate #1 -+++ [diff-fix~2] Pretty-print messages. + * [master] Release candidate #1 +++* [diff-fix~2] Pretty-print messages. ------------ Both fixes are tested well, and at this point, you want to merge @@ -1764,13 +1765,13 @@ $ git show-branch ! [diff-fix] Fix rename detection. * [master] Merge fix in commit-fix --- - + [master] Merge fix in commit-fix -+ + [commit-fix] Fix commit message normalization. - + [master~1] Merge fix in diff-fix - ++ [diff-fix] Fix rename detection. - ++ [diff-fix~1] Better common substring algorithm. - + [master~2] Release candidate #1 -+++ [master~3] Pretty-print messages. + - [master] Merge fix in commit-fix ++ * [commit-fix] Fix commit message normalization. + - [master~1] Merge fix in diff-fix + +* [diff-fix] Fix rename detection. + +* [diff-fix~1] Better common substring algorithm. + * [master~2] Release candidate #1 +++* [master~3] Pretty-print messages. ------------ However, there is no particular reason to merge in one branch @@ -1797,12 +1798,12 @@ $ git show-branch ! [diff-fix] Fix rename detection. * [master] Octopus merge of branches 'diff-fix' and 'commit-fix' --- - + [master] Octopus merge of branches 'diff-fix' and 'commit-fix' -+ + [commit-fix] Fix commit message normalization. - ++ [diff-fix] Fix rename detection. - ++ [diff-fix~1] Better common substring algorithm. - + [master~1] Release candidate #1 -+++ [master~2] Pretty-print messages. + - [master] Octopus merge of branches 'diff-fix' and 'commit-fix' ++ * [commit-fix] Fix commit message normalization. + +* [diff-fix] Fix rename detection. + +* [diff-fix~1] Better common substring algorithm. + * [master~1] Release candidate #1 +++* [master~2] Pretty-print messages. ------------ Note that you should not do Octopus because you can. An octopus diff --git a/show-branch.c b/show-branch.c index f1bce499b..ea3d9e4c8 100644 --- a/show-branch.c +++ b/show-branch.c @@ -545,6 +545,7 @@ int main(int ac, char **av) int sha1_name = 0; int shown_merge_point = 0; int topo_order = 0; + int head_at = -1; git_config(git_show_branch_config); setup_git_directory(); @@ -675,6 +676,8 @@ int main(int ac, char **av) } /* header lines never need name */ show_one_commit(rev[i], 1); + if (is_head) + head_at = i; } if (0 <= extra) { for (i = 0; i < num_rev; i++) @@ -703,9 +706,19 @@ int main(int ac, char **av) shown_merge_point |= ((this_flag & all_revs) == all_revs); if (1 < num_rev) { - for (i = 0; i < num_rev; i++) - putchar((this_flag & (1u << (i + REV_SHIFT))) - ? '+' : ' '); + int is_merge = !!(commit->parents && commit->parents->next); + for (i = 0; i < num_rev; i++) { + int mark; + if (!(this_flag & (1u << (i + REV_SHIFT)))) + mark = ' '; + else if (is_merge) + mark = '-'; + else if (i == head_at) + mark = '*'; + else + mark = '+'; + putchar(mark); + } putchar(' '); } show_one_commit(commit, no_name); diff --git a/t/t1200-tutorial.sh b/t/t1200-tutorial.sh index d7562e974..8ff5dd92c 100755 --- a/t/t1200-tutorial.sh +++ b/t/t1200-tutorial.sh @@ -118,8 +118,8 @@ cat > show-branch.expect << EOF * [master] Merged "mybranch" changes. ! [mybranch] Some work. -- -+ [master] Merged "mybranch" changes. -++ [mybranch] Some work. +- [master] Merged "mybranch" changes. +*+ [mybranch] Some work. EOF git show-branch --topo-order master mybranch > show-branch.output @@ -142,7 +142,7 @@ cat > show-branch2.expect << EOF ! [master] Merged "mybranch" changes. * [mybranch] Merged "mybranch" changes. -- -++ [master] Merged "mybranch" changes. +-- [master] Merged "mybranch" changes. EOF git show-branch --topo-order master mybranch > show-branch2.output -- 2.26.2