Man pages sections > man1 > git-sh

git-sh -- a git shell

GIT-SH(1) GIT-SH(1)

NAME

git-sh -- a git shell

SYNOPSIS

git-sh

DESCRIPTION

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 session.
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 ~/.gitconfig.

BUILTIN ALIASES

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

CUSTOM ALIASES

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:
[alias]
  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
    

PROMPT

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 color.sh config value to auto:
$ git config --global color.sh auto
    
Customize prompt colors by setting the color.sh.branch, color.sh.workdir, and color.sh.dirty git config values:
$ git config --global color.sh.branch 'yellow reverse'
$ git config --global color.sh.workdir 'blue bold'
$ git config --global color.sh.dirty 'red'
    
See colors in git for information.

COMPLETION

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 separately.

CUSTOMIZING

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.

ENVIRONMENT

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.
GIT_WORK_TREE
Explicitly set the path to the root of the work tree instead of assuming the nearest parent directory with a .git repository.

SEE ALSO

bash(1), git(1), git-config(1), http://github.com/rtomayko/git-sh
March 2010 Ryan Tomayko