Find file
Fetching contributors…
Cannot retrieve contributors at this time
200 lines (158 sloc) 5.17 KB
git-sh(1) -- a git shell
`git-sh` starts an interactive `bash(1)` session modified for git-heavy
workflows. Typical usage is to change into the directory of a git work tree or
bare repository and run the `git-sh` command to start an interactive shell
Top-level command aliases are created for all core `git(1)` subcommands, git-sh
builtin aliases (see *BUILTIN ALIASES*), and git command aliases defined in
**git-sh** loads a set of standard aliases in addition to all core git commands.
The builtin aliases are overridden by aliases defined in the user or system
gitconfig files.
* `a`:
git add
* `b`:
git branch
* `c`:
git checkout
* `d`:
git diff
* `f`:
git fetch --prune
* `k`:
git cherry-pick
* `l`:
git log --pretty=oneline --abbrev-commit
* `n`:
git commit --verbose --amend
* `r`:
git remote
* `s`:
git commit --dry-run --short
* `t`:
git diff --cached
### The Staging Area
* `a`:
git add
* `aa`:
git add --update (mnemonic: "add all")
* `stage`:
git add
* `ap`:
git add --patch
* `p`:
git diff --cached (mnemonic: "patch")
* `ps`:
git diff --cached --stat (mnemonic: "patch stat")
* `unstage`:
git reset HEAD
### Commits and Commit History
* `ci`:
git commit --verbose
* `ca`:
git commit --verbose --all
* `amend`:
git commit --verbose --amend
* `n`:
git commit --verbose --amend
* `k`:
git cherry-pick
* `re`:
git rebase --interactive
* `pop`:
git reset --soft HEAD^
* `peek`:
git log -p --max-count=1
### Fetching and Pulling
* `f`:
git fetch
* `pm`:
git pull (mnemonic: "pull merge")
* `pr`:
git pull --rebase (mnemonic: "pull rebase")
### Miscellaneous Commands
* `d`:
git diff
* `ds`:
git diff --stat (mnemonic: "diff stat")
* `hard`:
git reset --hard
* `soft`:
git reset --soft
* `scrap`:
git checkout HEAD
Anything defined in the `[alias]` section of the repository, user, or system git
config files are also available as top-level shell commands. Assuming a
`~/.gitconfig` that looked like this:
ci = commit --verbose
ca = commit -a
d = diff
s = status
thanks = !git-thanks
... you might then have the following shell session:
master!something> echo "stuff" >somefile
master!something*> s
M somefile
master!something*> d
diff --git a/somefile b/somefile
-- a/somefile
++ b/somefile
@@ -0,0 +1 @@
+ stuff
master!something*> ca -m "add stuff"
master!something> thanks HEAD
The default prompt shows the current branch, a bang (`!`), and then the relative
path to the current working directory from the root of the work tree. If the
work tree includes modified files that have not yet been staged, a dirty status
indicator (`*`) is also displayed.
The git-sh prompt includes ANSI colors when the git `color.ui` option is set and
enabled. To enable git-sh's prompt colors explicitly, set the `` config
value to `auto`:
$ git config --global auto
Customize prompt colors by setting the ``, ``,
and `` git config values:
$ git config --global 'yellow reverse'
$ git config --global 'blue bold'
$ git config --global 'red'
$ git config --global 'red'
$ git config --global 'red'
See [colors in git]( for information.
Bash completion support is automatically enabled for all git built-in commands
and also for aliases defined in the user `~/.gitconfig` file. The auto-completion
logic is smart enough to know an alias `d` that expands to `git-diff` should use
the same completion configuration as the `git-diff` command.
The completion code is a slightly modified version of the git bash completion
script shipped with the core git distribution. The script is built into the
`git-sh` executable at compile time and need not be obtained or installed
Most `git-sh` behavior can be configured by editing the user or system gitconfig
files (`~/.gitconfig` and `/etc/gitconfig`) either by hand or using
`git-config(1)`. The `[alias]` section is used to create basic command aliases.
The `/etc/gitshrc` and `~/.gitshrc` files are sourced (in that order)
immediately before the shell becomes interactive.
The `~/.bashrc` file is sourced before either `/etc/gitshrc` or `~/.gitshrc`.
Any bash customizations defined there and not explicitly overridden by `git-sh`
are also available.
* `PS1`:
Set to the dynamic git-sh prompt. This can be customized in the `~/.gitshrc`
or `/etc/gitshrc` files.
* `GIT_DIR`:
Explicitly set the path to the git repository instead of assuming the
nearest `.git` path.
Explicitly set the path to the root of the work tree instead of assuming
the nearest parent directory with a `.git` repository.
bash(1), git(1), git-config(1),