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.