An open API service indexing awesome lists of open source software.

https://github.com/felipec/git-smartlist


https://github.com/felipec/git-smartlist

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

          

This tool helps create typical revisions (e.g. `master..@`), so that you
don't have to.

For example, if you want to quickly see the commits of the current branch, you
can do the following:

git log --oneline master..@

But what if your current branch is not based on master, but say "development"?
You can type `development..@`, but it gets tedious to do this for every branch.

You could of course configure the upstream tracking branch of you current branch,
and then you can just do:

git log --oneline @{upstream}..@

That's *if* you have configured the upstream tracking branch.

`git-smartlist` can figure out what revision you would want with the
`from-upstream` option:

git smartlist log from-upstream

Then you can create an alias for that:

git config --global alias.ls 'smartlist log from-upstream'

In order so you don't have to keep track of all this, or type anything,
`git-smartlist` allows you to just do:

git ls

There are five shorthands that `git smartlist` can help with.

== Installation ==

Simply copy the script anywhere in your '$PATH' and make it
executable, or run `make install` which will install it by default to
your '~/bin/' directory (make sure it's in your '$PATH').

== Aliases ==

The best way to use `git smartlist` is to setup aliases to the different modes,
for example, `git lb` would be the equivalent of `git smartlist log branches`.

First you will need a good log alias, for example 'lg':

git config --global alias.lg 'log --oneline --decorate --boundary --graph'

Then you can add the following to your configuration (`git config --global --edit`):

[alias]
ls = smartlist lg specific
lm = smartlist lg from
lc = smartlist lg from-upstream
la = smartlist lg all
lb = smartlist lg branches
ln = smartlist lg negate-upstreams

You can pick any name you want, and only the modes you need, but the two I use the most are:

git ls # shows only the commits of the current branch
git lb # shows the commits from all the local branches
git lb fc/ # shows the commits from the local branches that start with fc/

== Usage ==

=== specific ===

This mode is basically saying: show me this specific branch/branches.

By default, it's the equivalent of:

$ git smartlist echo specific
=> @{upstream}..@

If you specify a branch:

$ git smartlist echo specific feature-a
=> feature-a@{upstream}..feature-a

However, if more than one branch is specified:

$ git smartlist echo specific next feature-a
=> next feature-a --not $merge_base

So, basically it's a mixture of `from-upstream` and `branches`.

=== all ===

This mode is equivalent to:

$ git smartlist echo all
=> --branches --remotes --not $merge_base

=== branches ===

By default this mode is the equivalent of:

$ git smartlist echo branches
=> --branches --not $merge_base

However, multiple branches can be specified

$ git smartlist echo branches next feature-a
=> next feature-a --not $merge_base

Prefixes and namespaces can be specified too:

$ git smartlist echo branches fc/
=> --branches=fc/ --not $merge_base

=== from ===

By default this mode is the equivalent of:

$ git smartlist echo from
=> master..@

But you can specify the branch:

$ git smartlist echo from feature-a
=> master..feature-a

You can also specify the starting point:

$ git smartlist echo from feature-a next
=> next..feature-a

=== from-upstream ===

By default this mode is the equivalent of:

$ git smartlist echo from-upstream
=> @{upstream}..@

If there's no upstream configured, `master` is used by default.

You can also specify the branch:

$ git smartlist echo from-upstream feature-a
=> feature-a@{upstream}..feature-a

=== negate-upstreams ===

This is the equivalent of multiple `from-upstream` commands; all their upstreams
are negated:

$ git smartlist echo negate-upstreams next feature-a
=> next@{u}..next feature@{u}..feature

== Configuration ==

`git smartlist` can be configured globally, or per repository.

=== smartlist.merge-base ===

Whether to use the merge-base functionality. If not set
the `branches` subcommand would simply do `--branches`.

Default: true

=== smartlist.friendly ===

Whether to use friendly names. If not set git IDs (SHA-1) are used instead of
refnames.

Default: false