Skip to content

Commit

Permalink
show-branch: make the current branch and merge commits stand out.
Browse files Browse the repository at this point in the history
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 <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jan 15, 2006
1 parent 54f9734 commit ebedc31
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 49 deletions.
15 changes: 8 additions & 7 deletions Documentation/git-show-branch.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,22 @@ 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.
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"
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.
---
Expand All @@ -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
Expand Down
24 changes: 12 additions & 12 deletions Documentation/howto/revert-branch-rebase.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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....
------------------------------------------------
49 changes: 25 additions & 24 deletions Documentation/tutorial.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
------------------------------------------------


Expand Down Expand Up @@ -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
Expand All @@ -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.
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
19 changes: 16 additions & 3 deletions show-branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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++)
Expand Down Expand Up @@ -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);
Expand Down
6 changes: 3 additions & 3 deletions t/t1200-tutorial.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit ebedc31

Please sign in to comment.