Skip to main content

git-genie 🧞

Generate & explain git commands using plain english.

Generate commit messages based on staged changes

 git-genie commit

Generated command: git commit -m 'Update README with commit message example and instructions'

Generate & Explain complex git commands using plain english

example

Installation

pip install git-genie

Usage

❯ git-genie [OPTIONS] INSTRUCTION

For example:

 git-genie --explain "Who was the last person to modify the README.md file?"

Options:

  • --explain, -e: Explain the generated git command automatically.
  • --execute, -x: Execute the generated git command automatically.
  • --install-completion: Install completion for the current shell.
  • --show-completion: Show completion for the current shell, to copy it or customize the installation.
  • --help, -h: Show this message and exit.

If no options are provided, the program will run in interactive mode.

Optionally, you can add a "gg" alias to your shell's rc file (e.g. ~/.bashrc) to make the command shorter:

alias gg="git-genie"

Pre-requisites

OpenAI API key

export OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Generate commit messages

Generating commit messages is done by using the commit command. This method will create a concise message based on the changes staged for a commit.

 git status

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md

Let's generate a commit message for the changed README.md file:

 git-genie commit
Generated commit command:git commit -m 'Update README with commit message example and instructions'
(E)xplain or e(X)ecute or (N)ew?: X

By pressing X, the generated commit command will be executed automatically:

Running command: git commit -m 'Update README with commit message example and instructions'
Output:
[commit_gen 75d69ce] Update README with commit message example and instructions
 1 file changed, 19 insertions(+)

Interactive mode

By default, the program will run in interactive mode, where it will ask you if you would like to explain the generated git command, execute it, or generate a new command.

~/git-genie  git-genie "count how many times the README.md file was modified in the last week"

Generated git command: git log --since=1.week -- README.md | grep "^commit" | wc -l

(E)xplain or e(X)ecute or (N)ew?: E

Explanation
 git log -> Show commit logs
--since=1.week -> Show commits more recent than a specific date
-- README.md -> Only commits that affect README.md
| -> Pipe the output of the previous command to the next command
grep "^commit" -> Only show lines that start with "commit"
wc -l -> Count the number of lines

e(X)ecute or (N)ew?: X

Running command:  git log --since=1.week -- README.md | grep "^commit" | wc -l
Output:
       2

Non-interactive mode

Explain

By using the --explain flag, the program will print the explanation of the generated git command.

~/git-genie  git-genie "amend all previous commits with new email address" --explain

Generated git command:  git rebase -i HEAD~5 --autosquash -m "legacy code"

Explanation

 git rebase -> Forward-port local commits to the updated upstream head
-i, --interactive -> Make a list of the commits which are about to be rebased.Let the user edit that list before rebasing.
--autosquash -> Automatically move commits that begin with squash!/fixup! to the beginningof the todo list.
-m, --merge -> Use the given message as the merge commit message.If multiple -m options are given, their values are concatenated as separate paragraphs.
HEAD~5 -> The last 5 commits
legacy code -> The message of the merge commit

Execute

By using the --execute flag, the program will execute the generated git command automatically without asking for confirmation.

~/git-genie  git-genie "print last 5 commits logs, condensed" --execute

Generated git command:  git log -5 --oneline

Running command:  git log -5 --oneline

Output:
9a33bc3 update email
f76f041 CLI interface
ae8abbd Add pycache to gitignore
67169fd rich print
3bac238 Refactor

Release files for git-genie 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for git-genie 0.2.0
File Size Uploaded
git_genie-0.2.0.tar.gz 6.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for git-genie 0.2.0
File Interpreter ABI Platform
git_genie-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size:12.4 kB

Release files / git_genie-0.2.0.tar.gz

Download URL git_genie-0.2.0.tar.gz
Size 6.3 kB
Tags Source
SHA-256 checksum
How to use checksums
5437f6395abbbb4e20371531d6305e1a080fa278f2de4797403bcded7512de04
BLAKE2b-256 checksum
How to use checksums
8fefb35f33a28a5b8e42021c3fb05f7cd92144037e12de6baffd2824c5db8769
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.10.9 Darwin/21.6.0

Release files / git_genie-0.2.0-py3-none-any.whl

Download URL git_genie-0.2.0-py3-none-any.whl
Size 6.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
73efe0206675016686c845729c99e3283bd7930134dbd55076c539166c3ba7c2
BLAKE2b-256 checksum
How to use checksums
bcfe6f9a5c525b537bac43fa99ccb780aa7c6776c3eaa6947e55848d9bde9003
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.10.9 Darwin/21.6.0

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page