Git 2.11+ has more versatile `submodule`, `fetch`, `rebase` options for common use-cases.
17 KiB
Git
Enhances the Git distributed version control system by providing aliases, functions and by exposing repository status information to prompts.
This module must be loaded before the completion
module so that the
provided completion definitions are loaded automatically by completion
module.
Note: Git 2.11 is the minimum required version for better git-rev-list and git-submodule support.
Settings
Log
To configure the format of the git-log output, add the following to
${ZDOTDIR:-$HOME}/.zpreztorc
, and replace '<context>'
with 'brief'
,
'oneline'
, and 'medium'
. This will be passed to the --pretty=format:
switch.
zstyle ':prezto:module:git:log:context' format '<context>'
Status
Retrieving the status of a repository with git-submodule can take a long
time. To configure the submodules to ignore, add the following to
${ZDOTDIR:-$HOME}/.zpreztorc
, and replace '<state>'
with 'dirty'
,
'untracked'
, 'all'
, or 'none'
.
zstyle ':prezto:module:git:status:ignore' submodules '<state>'
This setting affects all aliases and functions that call git-status
.
Aliases
Aliases are enabled by default. To disable them, add the following to
${ZDOTDIR:-$HOME}/.zpreztorc
.
zstyle ':prezto:module:git:alias' skip 'yes'
Git
g
is short forgit
.
Branch (b)
gb
lists, creates, renames, and deletes branches.gbc
creates a new branch.gbl
lists branches and their commits. (alsogbv
)gbL
lists all local and remote branches and their commits.gbr
renames a branch. (alsogbm
)gbR
renames a branch even if the new branch name already exists. (alsogbM
)gbs
lists branches and their commits with ancestry graphs.gbS
lists local and remote branches and their commits with ancestry graphs.gbV
lists branches with more verbose information about their commits.gbx
deletes a branch. (alsogbd
)gbX
deletes a branch irrespective of its merged status. (alsogbD
)
Commit (c)
gc
records changes to the repository.gcS
records changes to the repository. (Signed)gca
stages all modified and deleted files.gcaS
stages all modified and deleted files. (Signed)gcm
records changes to the repository with the given message.gcmS
records changes to the repository with the given message. (Signed)gcam
stages all modified and deleted files, and records changes to the repository with the given message.gco
checks out a branch or paths to work tree.gcO
checks out hunks from the index or the tree interactively.gcf
amends the tip of the current branch using the same log message as HEAD.gcfS
amends the tip of the current branch using the same log message as HEAD. (Signed)gcF
amends the tip of the current branch.gcFS
amends the tip of the current branch. (Signed)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
displays commits with various objects.gcsS
displays commits with GPG signature.gcl
lists lost commits.gcy
displays commits yet to be applied to upstream in the short format.gcY
displays commits yet to be applied to upstream.
Conflict (C)
gCl
lists unmerged files.gCa
adds unmerged file contents to the index.gCe
executes merge-tool on all unmerged file.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 (d)
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 (f)
gf
downloads objects and references from another repository.gfa
downloads objects and references from all remote repositories.gfc
clones a repository into a new directory.gfcr
clones a repository into a new directory including all submodules.gfm
fetches from and merges with another repository or local branch.gfr
fetches from and rebases on another repository or local branch.
Flow (F)
gFi
is short forgit flow init
Feature (Ff)
gFf
is short forgit flow feature
gFfl
is short forgit flow feature list
gFfs
is short forgit flow feature start
gFff
is short forgit flow feature finish
gFfp
is short forgit flow feature publish
gFft
is short forgit flow feature track
gFfd
is short forgit flow feature diff
gFfr
is short forgit flow feature rebase
gFfc
is short forgit flow feature checkout
gFfm
is short forgit flow feature pull
gFfx
is short forgit flow feature delete
Bugfix (Fb)
gFb
is short forgit flow bugfix
gFbl
is short forgit flow bugfix list
gFbs
is short forgit flow bugfix start
gFbf
is short forgit flow bugfix finish
gFbp
is short forgit flow bugfix publish
gFbt
is short forgit flow bugfix track
gFbd
is short forgit flow bugfix diff
gFbr
is short forgit flow bugfix rebase
gFbc
is short forgit flow bugfix checkout
gFbm
is short forgit flow bugfix pull
gFbx
is short forgit flow bugfix delete
Release (Fl)
gFl
is short forgit flow release
gFll
is short forgit flow release list
gFls
is short forgit flow release start
gFlf
is short forgit flow release finish
gFlp
is short forgit flow release publish
gFlt
is short forgit flow release track
gFld
is short forgit flow release diff
gFlr
is short forgit flow release rebase
gFlc
is short forgit flow release checkout
gFlm
is short forgit flow release pull
gFlx
is short forgit flow release delete
Hotfix (Fh)
gFh
is short forgit flow hotfix
gFhl
is short forgit flow hotfix list
gFhs
is short forgit flow hotfix start
gFhf
is short forgit flow hotfix finish
gFhp
is short forgit flow hotfix publish
gFht
is short forgit flow hotfix track
gFhd
is short forgit flow hotfix diff
gFhr
is short forgit flow hotfix rebase
gFhc
is short forgit flow hotfix checkout
gFhm
is short forgit flow hotfix pull
gFhx
is short forgit flow hotfix delete
Support (Fs)
gFs
is short forgit flow support
gFsl
is short forgit flow support list
gFss
is short forgit flow support start
gFsf
is short forgit flow support finish
gFsp
is short forgit flow support publish
gFst
is short forgit flow support track
gFsd
is short forgit flow support diff
gFsr
is short forgit flow support rebase
gFsc
is short forgit flow support checkout
gFsm
is short forgit flow support pull
gFsx
is short forgit flow support delete
Grep (g)
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 (i)
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).gii
temporarily ignore differences in a given file.giI
unignore differences in a given file.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 (l)
gl
displays the log.gls
displays the stats log.gld
displays the diff log.glo
displays the one line log.glg
displays the graph log.glb
displays the brief commit log.glc
displays the commit count for each contributor in descending order.glS
displays the log and checks the validity of signed commits.
Merge (m)
gm
joins two or more development histories together.gmC
joins two or more development histories together but does not commit.gmF
joins two or more development histories together but does not commit generating a merge commit even if the merge resolved as a fast-forward.gma
aborts the conflict resolution, and reconstructs the pre-merge state.gmt
runs the merge conflict resolution tools to resolve conflicts.
Push (p)
gp
updates remote refs along with associated objects.gpf
forcefully updates remote refs along with associated objects using the safer--force-with-lease
option.gpF
forcefully updates remote refs along with associated objects using the riskier--force
option.gpa
updates remote branches along with associated objects.gpA
updates remote branches and tags along with associated objects.gpt
updates remote tags along with associated objects.gpc
updates remote refs along with associated objects and adds origin as an upstream reference for the current branch.gpp
pulls and pushes from origin to origin.
Rebase (r)
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 (R)
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
displays information about a given remote.gRb
opens a remote on GitHub in the default browser.
Stash (s)
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.gsL
lists dropped 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 changes of the dirty working directory, including untracked.gsS
stashes the changes of the dirty working directory interactively.gsw
stashes the changes of the dirty working directory retaining the index.
Submodule (S)
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 submodule.gSx
removes a submodule.
Tag (t)
gt
lists tags or creates tag.gtl
lists tags matching pattern.gts
creates a signed tag.gtv
validate a signed tag.
Working directory (w)
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
removes untracked files from the working tree (dry-run).gwC
removes 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.
Shadows
The following aliases may shadow system commands:
gb
shadows the GB.gm
shadows the GraphicsMagick image processor.gpt
shadows the GUID partition table maintenance utility.gs
shadows the Ghostscript interpreter and previewer.
If you frequently use the above commands, you may wish to remove said aliases
from this module or to disable them at the bottom of the zshrc with unalias
.
You can temporarily bypass an alias by prefixing it with a backward slash:
\gpt
.
Functions
git-branch-current
displays the current branch.git-commit-lost
lists lost commits.git-dir
displays the path to the Git directory.git-hub-browse
opens the GitHub repository in the default browser.git-hub-shorten-url
shortens GitHub URLs.git-info
exposes repository information via the$git_info
associative array.git-root
displays the path to the working tree root.git-stash-clear-interactive
asks for confirmation before clearing the stash.git-stash-dropped
lists dropped stashed states.git-stash-recover
recovers given dropped stashed states.git-submodule-move
moves a submodule.git-submodule-remove
removes a submodule.
Theming
To display information about the current repository in a prompt, define the
following styles in the prompt_name_setup
function, where the syntax for
setting a style is as follows.
zstyle ':prezto:module:git:info:context:subcontext' format 'string'
Main Contexts
Name | Format Code | Description |
---|---|---|
action | %s | Special action name |
ahead | %A | Commits ahead of remote count |
behind | %B | Commits behind of remote count |
branch | %b | Branch name |
commit | %c | Commit hash |
position | %p | Commits from the nearest tag count |
remote | %R | Remote name |
stashed | %S | Stashed states count |
Concise Contexts
Name | Format Code | Description |
---|---|---|
clean | %C | Clean state |
dirty | %D | Dirty files count |
indexed | %i | Indexed files count |
unindexed | %I | Unindexed files count |
untracked | %u | Untracked files count |
The following contexts must be enabled with the following zstyle:
zstyle ':prezto:module:git:info' verbose 'yes'
Verbose Contexts
Name | Format Code | Description |
---|---|---|
added | %a | Added files count |
clean | %C | Clean state |
deleted | %d | Deleted files count |
dirty | %D | Dirty files count |
modified | %m | Modified files count |
renamed | %r | Renamed files count |
unmerged | %U | Unmerged files count |
untracked | %u | Untracked files count |
Special Action Contexts
Name | Format | Description |
---|---|---|
apply | value | Applying patches |
bisect | value | Binary searching for changes |
cherry-pick | value | Cherry picking |
cherry-pick-sequence | value | Cherry picking sequence |
merge | value | Merging |
rebase | value | Rebasing |
rebase-interactive | value | Rebasing interactively |
rebase-merge | value | Rebasing merge |
revert | value | Reverting |
revert-sequence | value | Reverting sequence |
First, format the repository state attributes. For example, to format the branch and remote names, define the following styles.
zstyle ':prezto:module:git:info:branch' format 'branch:%b'
zstyle ':prezto:module:git:info:remote' format 'remote:%R'
Second, format how the above attributes are displayed in prompts.
zstyle ':prezto:module:git:info:keys' format \
'prompt' ' git(%b)' \
'rprompt' '[%R]'
Last, add $git_info[prompt]
to $PROMPT
and $git_info[rprompt]
to
$RPROMPT
respectively and call git-info
in the prompt_name_preexec
hook
function.
Authors
The authors of this module should be contacted via the issue tracker.