from Hacker News

Git alias for printing recently-used branches

by ses4j on 4/6/20, 6:53 PM with 23 comments

  • by petepete on 4/6/20, 8:20 PM

    I alias 'git recent' to:

        git branch --sort=-committerdate -v
    
    It gives me the following output (first line for not actually included):

        [branch name]                                      [hash]  [commit message header]
        move-radio-and-checkbox-hints-up                   9dff690 Move the hints belonging to radios/checkboxes up
        update-rubocop                                     8cace1f Update rubocop and pry, fix some new offences
        fix-remaining-injected-content-placement           48dc51d Reorder elements of other inputs
  • by amarshall on 4/7/20, 1:37 AM

    So many commenters here providing alternatives seem to miss the key differentiating feature: recently checked out vs. recently committed to. For me the former is immensely more useful as I may have gone to a branch to do something other than commit, and those are missed with the latter.

    Anyway, I’ve had my own (far more involved) version of listing recently checked-out branches for years. It will also filter out the current branch and deleted branches, and has a rudimentary interactive selection.

    Maybe someone will find it useful as I have.

    https://github.com/amarshall/git-recent-branches

  • by telekid on 4/6/20, 9:47 PM

    What about just `git reflog`? Then, you get to see recent branches _and_ you get additional context about what you were doing at the time.
  • by floatingatoll on 4/6/20, 10:15 PM

    I shared this with a coworker, who discovered that it dumps information about branches that don't exist anymore. This comment's alternate command doesn't list deleted branches:

    https://news.ycombinator.com/item?id=22797911

    And for those wondering "deleted branches?", check the git-gc man page for gc.reflogexpire (default 90 days) and gc.reflogexpireunreachable (default 30 days).

  • by kbd on 4/7/20, 12:29 AM

    Even better, show your local/remote branches in most-recent order and interactively pick the branch to switch to using fzf:

    https://github.com/kbd/setup/blob/f3ebd5ef2bc8a010357b574c02...

  • by jph on 4/6/20, 11:45 PM

    I alias `git ref-recent` to:

        git for-each-ref 
            --sort=-committerdate 
            --format='%(committerdate:short) %(refname:short) %(objectname:short) %(contents:subject)' 
            refs/heads/
    
    The output shows the date, branch name, commit hash, and commit subject, such as:

        2020-04-06 master d8560f4 Add feature foo
        2020-03-28 fix-button 15f985d Fix button for menu
        2020-03-19 optimize-sort 3dbec4d Optimize sort algorithm
    
    I put my aliases in GitAlias, which has many more: https://github.com/gitalias/gitalias
  • by bhaak on 4/7/20, 11:32 AM

    I made a small script that outputs local and/or remote branches color coded: https://i.imgur.com/QkmPhm0.png

    https://github.com/bhaak/dotfiles/blob/master/git/git-overvi...

    It has been so useful to me that I think I should extract it from my dotfiles repository and give it its own repository.

    Or reimplement it in Rust as a introductory programming project.

  • by mpawelski on 4/6/20, 10:18 PM

    I had idea to add something similar as tab completion to posh-git module for Powershell. Sadly it was not merged (is posh-git dead?) https://github.com/dahlbyk/posh-git/pull/641

    I wonder if something similar can be done in bash? By default bash doesn't "cycle" through possible completion but just display the list. Still, I guess it would be usefull to display last used branches first.

  • by memco on 4/7/20, 2:09 AM

    Neat! This was a feature I requested in Fork[0], but wasn't sure such a thing was even possible.

    [0] https://git-fork.com

  • by alpb on 4/7/20, 12:55 AM

    I alias `gbv` to this which shows you commit hash, msg, ID, author, date with colors:

    alias gbv="git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objec tname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'"

  • by whalesalad on 4/7/20, 2:58 AM

    I’ve got something similar, but it’s color coded and has columns with more info.

    https://github.com/whalesalad/dotfiles/blob/master/zsh/git.z...

  • by grumple on 4/6/20, 11:47 PM

    I use this: git for-each-ref --sort=authordate --format '%(authordate:iso) %(align:left,25)%(refname:short)%(end) %(subject)' refs/heads

    The most recent branches will appear closest to your cursor (on the bottom).

  • by jilles on 4/7/20, 1:06 AM

    Been using this snippet from Paul Irish for years: https://github.com/paulirish/git-recent
  • by ryanpetrich on 4/6/20, 10:28 PM

    Another option:

        git log --all --author=`git config user.email` --oneline --decorate