Skip to main content

No project description provided

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

git_genie-0.2.0.tar.gz (6.3 kB view hashes)

Uploaded Source

Built Distribution

git_genie-0.2.0-py3-none-any.whl (6.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page