DEV Community

Pranav Raut
Pranav Raut

Posted on

Automate Your Git Commit Messages with ChatGPT

Creating meaningful and concise commit messages is an essential part of a good development workflow. These messages help in tracking changes, understanding project history, and collaborating with team members. But let's admit it—writing commit messages can sometimes be a mundane task. In this article, we'll walk you through how to use OpenAI’s ChatGPT to generate Git commit messages automatically and how to run this script from any directory on your macOS system.

Prerequisites

To follow along, you’ll need:

  • Basic knowledge of Python.
  • Git installed on your machine.
  • An account on OpenAI and an API key. If you don't already have an API key, you can learn how to generate one by following this guide on creating an OpenAI API key.

Step 1: Setting Up the Environment

First, install the openai Python package:

pip install openai
Enter fullscreen mode Exit fullscreen mode

Next, set your OpenAI API key as an environment variable:

export OPENAI_API_KEY='your_openai_api_key'
Enter fullscreen mode Exit fullscreen mode

Step 2: Writing the Python Script

Here’s the Python script generate_commit_message.py:

#!/usr/bin/env python3
import subprocess
from openai import OpenAI
import os

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

def get_git_diff():
    """Fetch the git changes."""
    result = subprocess.run(
        ["git", "diff", "--staged"], stdout=subprocess.PIPE, text=True
    )
    return result.stdout

def generate_commit_message(changes):
    """Use OpenAI API to generate a commit message."""
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "role": "system",
                "content": "You are an assistant that generates helpful and concise git commit messages.",
            },
            {
                "role": "user",
                "content": f"Generate a Git commit message for the following changes, following the Git commit standards:\n\n{changes}",
            },
        ],
        max_tokens=350,  # Adjust as needed
        temperature=0.5,
    )
    return response.choices[0].message.content.strip()

def main():
    # Fetch the changes
    changes = get_git_diff()

    if not changes:
        print("No staged changes found.")
        return

    # Generate commit message
    commit_message = generate_commit_message(changes)
    print(f"Generated Commit Message: {commit_message}")

    # Optional: Automatically commit with the generated message
    # subprocess.run(["git", "commit", "-m", commit_message])

if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode

Save this script to a file named generate_commit_message.py.

Step 3: Making the Script Executable and Accessible

To make the script executable and accessible from any directory, follow these steps:

  1. Make the Script Executable:

    chmod +x /path/to/your/generate_commit_message.py
    
  2. Move the Script to a Directory in Your PATH:

    sudo mv /path/to/your/generate_commit_message.py /usr/local/bin/generate_commit_message
    
  3. Ensure the OpenAI API Key is Set in Your Environment:
    Add the following line to your shell profile (e.g., .bash_profile, .zshrc, or .bashrc):

    export OPENAI_API_KEY='your_openai_api_key'
    
  4. Reload Your Profile:

    source ~/.bash_profile  # or source ~/.zshrc or source ~/.bashrc
    

Step 4: Running the Script

Ensure you have staged changes by running:

git add .
Enter fullscreen mode Exit fullscreen mode

Then execute your script from any directory:

generate_commit_message
Enter fullscreen mode Exit fullscreen mode

You should see a generated commit message printed in your terminal.

Conclusion

By leveraging ChatGPT with a simple Python script, you can automate the generation of meaningful Git commit messages. This not only saves time but also ensures that your commit history is both informative and well-documented. Making the script executable from any directory on macOS streamlines your workflow further. Feel free to customize the script to better fit your needs or extend its functionality. Happy coding!

Top comments (0)