views:

161

answers:

5

Is there a way to show only the branch structure in Git? There are a number of tools that show the commits graphically, but in my case the list is so long that it's impossible to see the structure. I guess git-log could be the answer, but I can't find any switches that only show the branching commits. This along with "--graph --branches --oneline --all" could do the trick.

EDIT: I'm looking for a way to do this in Ubuntu.

+3  A: 

gitx if you are on a mac

smartgit for mac and or Windoze (but i have not used it)

git-gui then for Ubuntu

PurplePilot
Sorry, forgot to mention that I use Ubuntu.
Makis
+5  A: 

I am not sure about what you mean by "branch structure".
git log can help visualize the branches made through commits (See this blog post):

[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

alt text

But if you only wants the different HEAD branches, you could try something along the lines of:

heads = !"git log origin/master.. --format='%Cred%h%Creset;%C(yellow)%an%Creset;%H;%Cblue%f%Creset' | git name-rev --stdin --always --name-only | column -t -s';'"

(using the column command, and here only for commits since the last origin/master commit)

Note: Jakub Narębski recommands adding the option --simplify-by-decoration, see his answer.

VonC
This was pretty close (the latter solution), I just had to add the date and --branch to the command. Otherwise it only shows the current branch. Although it still doesn't leave out commits that are not the head. What I meant by "branch structure" is a way to see from what branch each branch is created, but with this command I can scroll through the list (which has about 350 commits) to see what has been going on.
Makis
@Makis: if you have a final command, you can post it as an answer: I am interested (and will vote it up). Then, you can even accept your own answer as the official one if you want.
VonC
I'm still looking into it, I'll be back at the office tomorrow to try to make sense of the structure. The repo was created with svn2git and I'm not 100% sure the svn repo was by the book either.
Makis
@Makis: Try `--simplify-by-decoration` option to git-log.
Jakub Narębski
This does the trick, thanks! Thanks for everyone else for your suggestions as well!
Makis
A: 

To get more information on how a particular branch relates to other branches in your repository and remotes, you can use git wtf which is an add on script by William Morgan: http://git-wt-commit.rubyforge.org/

It produces summary information like:

$ git wtf
Local branch: master
[x] in sync with remote
Remote branch: origin/master ([email protected]:willgit/mainline.git)
[x] in sync with local

Feature branches:
{ } origin/experimental is NOT merged in (1 commit ahead)
    - some tweaks i'm playing around with [80e5da1]
{ } origin/dont-assume-origin is NOT merged in (1 commit ahead)
    - guess primary remote repo from git config instead of assuming "origin" [23c96f1]

(example taken from the above URL).

Emil
A: 

Basic solution is:

git log --graph --all

If you want to get more fancy:

git log --graph --all --pretty=format:"%Cblue%h%Creset [%Cgreen%ar%Creset] %s%C(yellow)%d%Creset"
Casey
+2  A: 

Perhaps what you want is --simplify-by-decoration option, see git log documentation:

--simplify-by-decoration

     Commits that are referred by some branch or tag are selected.

So it would be

git log --graph --simplify-by-decoration --all

or following VonC answer

git log --graph --simplify-by-decoration \
   --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \
   --abbrev-commit --date=relative
Jakub Narębski
Excellent, I had missed that particular option. +1
VonC
@VonC: This is quite new option; it appeared in git version 1.6.1
Jakub Narębski
@Jakub: 1.6.1? http://git.kernel.org/?p=git/git.git;a=tags : Thu, 25 Dec 2008, seems a lifetime away to me ;)
VonC