tj.git-extras/man/git-repl.md
John Bachir 032090e847
Add persistent history to git-repl (#1226)
* persistent command history

* notes

* decision on which commands to save

* configurable history location

* fix history initialization in various scenarios

* documentation

* comment

* don't add whitespace or consecutive duplicates to history

* fix manpage output

* Update bin/git-repl

Co-authored-by: Edwin Kofler <edwin@kofler.dev>

* Update bin/git-repl

Co-authored-by: Edwin Kofler <edwin@kofler.dev>

* Update git-repl

* Update bin/git-repl

* Apply suggestions from code review

* Add `extglob` and generate docs

* Fix regex

* update docs

rm man/git-repl.{1,html}
touch man/git-repl.md
make man/git-repl.{1,html}

---------

Co-authored-by: Edwin Kofler <edwin@kofler.dev>
2026-02-05 11:05:01 -08:00

2.8 KiB

git-repl(1) -- git read-eval-print-loop

SYNOPSIS

git-repl

git-repl [command...]

DESCRIPTION

Git read-eval-print-loop. Lets you run git commands without typing 'git'.

Commands can be prefixed with an exclamation mark (!) to be interpreted as a regular shell command.

Any arguments to git repl will be taken collectively as the first command to execute in the repl.

Type exit, quit, or q to end the repl session. Ctrl-D and Ctrl-C will also work.

COMMANDS

<command>

Interpreted as git <command>.

!<command>

Interpreted as <command> (not through git).

ls

Equivalent of 'git ls-files'.

exit|quit|q

Ends the repl session.

CONFIGURATION

Commands entered in a repl session will be saved to a history file and be available in future sessions, similar to a shell or programming language repl. By default, the global history file is at ~/.local/state/git_extras_repl_history. You can specify that your projects each have their own independent history file. This file will be saved in .git_repl_history at the top level of the repo, and will need to be added to the repo or global .gitignore.

# remove the --global flag to configure only an individual project to have its own history file
git config --global git-extras.repl.use-local-history "true"

You can specify a default command to run when hitting enter:

git config --global git-extras.repl.on-enter-command "git status -sb"

You can configure which character is used at the end of the prompt (default >):

git config --global git-extras.repl.prompt-character "±"

You can specify the prefix for the prompt (default git): git config --global git-extras.repl.prefix ""

You can have the name of the current git repo shown in the prompt (default false):

git config --global git-extras.repl.show-project-name "true"

EXAMPLES

$ git repl
git version 2.34.1
git-extras version 7.3.0
Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl.

git (master)> ls-files
History.md
Makefile
Readme.md
bin/git-changelog
bin/git-count
bin/git-delete-branch
bin/git-delete-tag
bin/git-ignore
bin/git-release

git (master)> !echo Straight from the shell!
Straight from the shell!

git (master)> quit

AUTHOR

Written by Tj Holowaychuk <tj@vision-media.ca>. Updated by Wyatt S Carpenter to add display of the previous command's exit status, 'q', and the ability to pass in the initial command as arguments.

REPORTING BUGS

<https://github.com/tj/git-extras/issues>

SEE ALSO

<https://github.com/tj/git-extras>