git
===

Provides handy git aliases and functions.

Many thanks to [Sorin Ionescu](https://github.com/sorin-ionescu) for the
excellent original aliases.

Aliases
-------

### Git

  * `g` is short for `git`.

### Branch

  * `gb` lists, creates, renames, and deletes branches.
  * `gbc` creates a new branch.
  * `gbl` lists branches and their commits.
  * `gbL` lists local and remote branches and their commits.
  * `gbm` renames a branch.
  * `gbM` renames a branch even if the new branch name already exists.
  * `gbs` lists branches and their commits with ancestry graphs.
  * `gbS` lists local and remote branches and their commits with ancestry
    graphs.
  * `gbx` deletes a branch.
  * `gbX` deletes a branch irrespective of its merged status.

### Commit

  * `gc` records changes to the repository.
  * `gca` commits all modified and deleted files.
  * `gcm` commits with the given message.
  * `gco` checks out a branch or paths to the working tree.
  * `gcO` checks out hunks from the index or the tree interactively.
  * `gcf` amends the tip of the current branch reusing the same log message as
    *HEAD*.
  * `gcF` amends the tip of the current branch.
  * `gcp` applies changes introduced by existing commits.
  * `gcP` applies changes introduced by existing commits without committing.
  * `gcr` reverts existing commits by reverting patches and recording new
     commits.
  * `gcR` removes the *HEAD* commit.
  * `gcs` shows one or more objects (blobs, trees, tags and commits).
  * `gcS` commits with GPG signature.
  * `gcv` verifies the GPG signature of commits.

### Conflict

  * `gCl` lists unmerged files.
  * `gCa` adds unmerged file contents to the index.
  * `gCe` executes merge-tool on all unmerged files.
  * `gCo` checks out our changes for unmerged paths.
  * `gCO` checks out our changes for all unmerged paths.
  * `gCt` checks out their changes for unmerged paths.
  * `gCT` checks out their changes for all unmerged paths.

### Data

  * `gd` displays information about files in the index and the work tree.
  * `gdc` lists cached files.
  * `gdx` lists deleted files.
  * `gdm` lists modified files.
  * `gdu` lists untracked files.
  * `gdk` lists killed files.
  * `gdi` lists ignored files.

### Fetch

  * `gf` downloads objects and references from another repository.
  * `gfc` clones a repository into a new directory.
  * `gfm` fetches from and merges with another repository or local branch.
  * `gfr` fetches from and rebases on top of another repository or local branch.
  * `gfu` removes unexisting remote-tracking references, fetches all remotes and
    merges.

### Grep

  * `gg` displays lines matching a pattern.
  * `ggi` displays lines matching a pattern ignoring case.
  * `ggl` lists files matching a pattern.
  * `ggL` lists files that are not matching a pattern.
  * `ggv` displays lines not matching a pattern.
  * `ggw` displays lines matching a pattern at word boundary.

### Index

  * `gia` adds file contents to the index.
  * `giA` adds file contents to the index interactively.
  * `giu` adds file contents to the index (updates only known files).
  * `gid` displays changes between the index and a named commit (diff).
  * `giD` displays changes between the index and a named commit (word diff).
  * `gir` resets the current *HEAD* to the specified state.
  * `giR` resets the current index interactively.
  * `gix` removes files/directories from the index (recursively).
  * `giX` removes files/directories from the index (recursively and forced).

### Log

  * `gl` displays the log.
  * `gls` displays the stats log.
  * `gld` displays the diff log.
  * `glo` displays the one line log.
  * `glO` displays the one line log with authors and dates.
  * `glg` displays the graph log.
  * `glG` displays the graph log with authors and dates.
  * `glv` displays the log verifying the GPG signature of commits.
  * `glc` displays the commit count for each contributor in descending order.
  * `glr` manages reflog information.

### Merge

  * `gm` joins two or more development histories together.
  * `gma` aborts the conflict resolution, and reconstructs the pre-merge state.
  * `gmC` performs the merge but does not commit.
  * `gmF` performs the merge generating a commit even if the merge resolved as a
    fast-forward.
  * `gmS` commits with GPG signature.
  * `gmv` verifies the GPG signature of the tip commit of the side branch being
    merged.
  * `gmt` runs the merge conflict resolution tools to resolve conflicts.

### Push

  * `gp` updates remote refs along with associated objects.
  * `gpf` forces a push safely (with "lease").
  * `gpF` forces a push.
  * `gpa` pushes all branches.
  * `gpA` pushes all branches and tags.
  * `gpt` pushes all tags.
  * `gpc` pushes the current branch and adds *origin* as an upstream reference
    for it.
  * `gpp` pulls and pushes the current branch from *origin* to *origin*.

### Rebase

  * `gr` forward-ports local commits to the updated upstream head.
  * `gra` aborts the rebase.
  * `grc` continues the rebase after merge conflicts are resolved.
  * `gri` makes a list of commits to be rebased and opens the editor.
  * `grs` skips the current patch.

### Remote

  * `gR` manages tracked repositories.
  * `gRl` lists remote names and their URLs.
  * `gRa` adds a new remote.
  * `gRx` removes a remote.
  * `gRm` renames a remote.
  * `gRu` fetches remotes updates.
  * `gRp` prunes all stale remote tracking branches.
  * `gRs` shows information about a given remote.

### Stash

  * `gs` stashes the changes of the dirty working directory.
  * `gsa` applies the changes recorded in a stash to the working directory.
  * `gsx` drops a stashed state.
  * `gsX` drops all the stashed states.
  * `gsl` lists stashed states.
  * `gsd` displays changes between the stash and its original parent.
  * `gsp` removes and applies a single stashed state from the stash list.
  * `gsr` recovers a given stashed state.
  * `gss` stashes the working directory changes, including untracked files.
  * `gsS` stashes the working directory changes interactively.
  * `gsw` stashes the working directory changes retaining the index.
  * `gsu` unapplies (reverts) applied changes.

### Submodule

  * `gS` initializes, updates, or inspects submodules.
  * `gSa` adds given a repository as a submodule.
  * `gSf` evaluates a shell command in each of checked out submodules.
  * `gSi` initializes submodules.
  * `gSI` initializes and clones submodules recursively.
  * `gSl` lists the commits of all submodules.
  * `gSm` moves a submodule.
  * `gSs` synchronizes submodules' remote URL to the value specified in
    `.gitmodules`.
  * `gSu` fetches and merges the latest changes for all submodules.
  * `gSx` removes a submodule.

### Tag

  * `gt` creates, lists, deletes or verifies a tag object signed with GPG.
  * `gts` creates a GPG-signed tag.
  * `gtv` verifies the GPG signature of tags.
  * `gtx` deletes tags with given names.

### Working tree

  * `gws` displays working-tree status in the short format.
  * `gwS` displays working-tree status.
  * `gwd` displays changes between the working tree and the index (diff).
  * `gwD` displays changes between the working tree and the index (word diff).
  * `gwr` resets the current *HEAD* to the specified state, does not touch the
    index nor the working tree.
  * `gwR` resets the current *HEAD*, index and working tree to the specified
    state.
  * `gwc` cleans untracked files from the working tree (dry-run).
  * `gwC` cleans untracked files from the working tree.
  * `gwx` removes files from the working tree and from the index recursively.
  * `gwX` removes files from the working tree and from the index recursively and
    forcefully.

### Misc

  * `g..` changes the current directory to the top level of the working tree.

Settings
--------

By default, all aliases are defined with a `g` prefix, as you can see above. But
some of the default aliases may shadow system commands, like `gpt` for the GUID
partition table maintenance utility.

You can temporarily bypass an alias by prefixing it with a backward slash:
`\gpt`.

Or you can use the following zstyle if you wish to customize the prefix used to
define all aliases:

    zstyle ':zim:git' aliases-prefix 'G'

Functions
---------

  * `git-branch-current` displays the current branch.
  * `git-branch-delete-interactive` asks for confirmation to also delete the
    upstream remote branch(es).
  * `git-dir` displays the path to the Git directory.
  * `git-ignore-add` adds any arguments to the .gitignore in the project root.
  * `git-root` displays the path to the working tree root.
  * `git-stash-clear-interactive` asks for confirmation before clearing the stash.
  * `git-stash-recover` recovers given dropped stashed states.
  * `git-submodule-move` moves a submodule.
  * `git-submodule-remove` removes a submodule.