Originally submitted in https://github.com/sorin-ionescu/prezto/pull/979
17 KiB
Git
Enhances the Git distributed version control system by providing aliases, functions and by exposing repository status information to prompts.
Git 1.7.2 is the minimum required version.
Settings
Log
The format of the git-log output is configurable via the following style,
where context is brief, oneline, and medium, which will be passed to the
--pretty=format:
switch.
zstyle ':prezto:module:git:log:context' format ''
Status
Retrieving the status of a repository with submodules can take a long time. Submodules may be ignored when they are dirty, untracked, all, or none.
zstyle ':prezto:module:git:status:ignore' submodules 'all'
This setting affects all aliases and functions that call git-status
.
Aliases
Aliases are enabled by default. You can disable them with:
zstyle ':prezto:module:git:alias' skip 'yes'
Git
g
is short forgit
.
Branch
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
gc
records changes to the repository.gca
stages all modified and deleted files.gcm
records changes to the repository with the given message.gcS
records changes to the repository. (Signed)gcSa
stages all modified and deleted files. (Signed)gcSm
records changes to the repository with the given message. (Signed) -gco
checks out a branch or paths to work tree.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.gcSf
amends the tip of the current branch using the same log message as HEAD. (Signed)gcF
amends the tip of the current branch.gcSF
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 various types of objects.gcl
lists lost commits.
Conflict
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
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.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
gFi
is short forgit flow init
Feature
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
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
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
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
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
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).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
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.
Merge
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
gp
updates remote refs along with associated objects.gpf
forcefully updates remote refs along with associated objects.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
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
displays information about a given remote.gRb
opens a remote on GitHub in the default browser.
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.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
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
gt
lists tags or creates tag.gtl
lists tags matching pattern.
Working directory
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 Graphics Magick 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.