-
Star
(376)
You must be signed in to star a gist -
Fork
(60)
You must be signed in to fork a gist
-
-
Save karpathy/1dd0294ef9567971c1e4348a90d69285 to your computer and use it in GitHub Desktop.
| # ----------------------------------------------------------------------------- | |
| # AI-powered Git Commit Function | |
| # Copy paste this gist into your ~/.bashrc or ~/.zshrc to gain the `gcm` command. It: | |
| # 1) gets the current staged changed diff | |
| # 2) sends them to an LLM to write the git commit message | |
| # 3) allows you to easily accept, edit, regenerate, cancel | |
| # But - just read and edit the code however you like | |
| # the `llm` CLI util is awesome, can get it here: https://llm.datasette.io/en/stable/ | |
| gcm() { | |
| # Function to generate commit message | |
| generate_commit_message() { | |
| git diff --cached | llm " | |
| Below is a diff of all staged changes, coming from the command: | |
| \`\`\` | |
| git diff --cached | |
| \`\`\` | |
| Please generate a concise, one-line commit message for these changes." | |
| } | |
| # Function to read user input compatibly with both Bash and Zsh | |
| read_input() { | |
| if [ -n "$ZSH_VERSION" ]; then | |
| echo -n "$1" | |
| read -r REPLY | |
| else | |
| read -p "$1" -r REPLY | |
| fi | |
| } | |
| # Main script | |
| echo "Generating AI-powered commit message..." | |
| commit_message=$(generate_commit_message) | |
| while true; do | |
| echo -e "\nProposed commit message:" | |
| echo "$commit_message" | |
| read_input "Do you want to (a)ccept, (e)dit, (r)egenerate, or (c)ancel? " | |
| choice=$REPLY | |
| case "$choice" in | |
| a|A ) | |
| if git commit -m "$commit_message"; then | |
| echo "Changes committed successfully!" | |
| return 0 | |
| else | |
| echo "Commit failed. Please check your changes and try again." | |
| return 1 | |
| fi | |
| ;; | |
| e|E ) | |
| read_input "Enter your commit message: " | |
| commit_message=$REPLY | |
| if [ -n "$commit_message" ] && git commit -m "$commit_message"; then | |
| echo "Changes committed successfully with your message!" | |
| return 0 | |
| else | |
| echo "Commit failed. Please check your message and try again." | |
| return 1 | |
| fi | |
| ;; | |
| r|R ) | |
| echo "Regenerating commit message..." | |
| commit_message=$(generate_commit_message) | |
| ;; | |
| c|C ) | |
| echo "Commit cancelled." | |
| return 1 | |
| ;; | |
| * ) | |
| echo "Invalid choice. Please try again." | |
| ;; | |
| esac | |
| done | |
| } |
guys, use https://github.com/di-sukharev/opencommit, it's the most feature reach open-source tool
run
npm i -g opencommit, thenoco config set OCO_OPENAI_API_KEY=your_keyand then sumply runocoto generate your git commit messages.πππ
ππ
guys, use https://github.com/di-sukharev/opencommit, it's the most feature reach open-source tool
run
npm i -g opencommit, thenoco config set OCO_OPENAI_API_KEY=your_keyand then sumply runocoto generate your git commit messages.πππ
Oh, I was looking for this repo but forgot the name, thanks!
guys, use https://github.com/di-sukharev/opencommit, it's the most feature reach open-source tool
runnpm i -g opencommit, thenoco config set OCO_OPENAI_API_KEY=your_keyand then sumply runocoto generate your git commit messages.
πππOh, I was looking for this repo but forgot the name, thanks!
You are welcome π©
check this https://github.com/Fl0p/gitpmoji
generate commit message / decorate with emoji / give rating / evaluate diff pros - uses git hook don't need any additional. cons - uses only openAI api
take a look at https://github.com/di-sukharev/opencommit, we even support llama running locally or remotely
I have been using:
git commit -m "$(git diff --staged | sgpt "Write a single conventional commits style commit message for this diff on the branch $(git rev-parse --abbrev-ref HEAD).")"
π
Made some changes so it doesn't make calls when there are no staged changes. Renamed the command to gai due to conflict with the Oh My ZSH alias
https://gist.github.com/vlameiras/8591bf75990571f5f1e2ea9c452047c3
Similar tool at coder/aicommit that follows a repo's existing commit style.
i suggest adding a parameter to bypass the ai-generated message when the user passes the -m flag
so that gcm -m 'my user-generated commit msg' allows a user to enter their own message without pinging the llm.
to do that you can add the following to line 11.
# Check if -m flag is provided
if [ "$1" = "-m" ] && [ -n "$2" ]; then
# Use the provided message directly
if git commit -m "$2"; then
echo "Changes committed successfully with your message!"
return 0
else
echo "Commit failed. Please check your message and try again."
return 1
fi
fiHere's a more convenient git ai copilot: https://github.com/Undertone0809/gcop
Benefits:
- Easier to use with git alias, which means just use the git command
- Compatible with all LLMs, easy to configure no matter what model you're using.
- Various git alias extensions to help you use git commands more easily.

Oh, nice job! Thxπ