---
name: "git-sh"
section: "1"
platform: "linux"
package: "git-sh"
version: "1.1-1"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/git-sh"
---

# git-sh(1)

## NAME

**git-sh** -- a git shell

## SYNOPSIS

**git-sh**

## DESCRIPTION

**git-sh** starts an interactive **[bash(1)](/bash/1.md)** 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)](/git/1.md)** 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)](/git-config/1.md)**. 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)](/bash/1.md), [git(1)](/git/1.md), [git-config(1)](/git-config/1.md),*http://github.com/rtomayko/git-sh*
