Generating a git commit message is quickly become a classic GenAI application for developers.
To help with this, we will craft a GenAIScript script.
The script acts as a regular node.js automation script and uses runPrompt
to issue calls to the LLM and ask the user to confirm the generated text.
๐ Explaining the Script
We start by using git
check if there are any staged changes in the Git repository:
let { stdout } = await host.exec("git", ["diff", "--cached"])
If no changes are staged, we ask the user if they want to stage all changes. If the user confirms, we stage all changes. Otherwise, we bail out.
const stage = await host.confirm("Stage all changes?", {
default: true,
})
if (stage) {
await host.exec("git", ["add", "."])
stdout = (await host.exec("git", ["diff", "--cached"])).stdout
}
if (!stdout) cancel("no staged changes")
We generate an initial commit message using the staged changes:
message = (
await runPrompt(
(_) => {
_.def("GIT_DIFF", stdout, { maxTokens: 20000 })
_.$`GIT_DIFF 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.
- do NOT add quotes`
},
{ temperature: 0.8 }
)
).text
The prompt configuration above indicates that the message should be concise,
related to the "git diff --cached" output, and should not include quotes.
User chooses how to proceed with the generated message:
choice = await host.select(
message, [
{ name: "commit", value: "commit", description: "accept message and commit" },
...
])
Options are given to edit or regenerate the message. If the user chooses to edit the message, we ask them to input a new message:
if (choice === "edit") {
message = await host.input("Edit commit message", {
required: true,
})
choice = "commit"
}
If the user chooses to commit the message, we commit the changes:
if (choice === "commit" && message) {
console.log((await host.exec("git", ["commit", "-m", message])).stdout)
}
๐ Running the Script
You can run this script using the CLI.
genaiscript run gcm
If you are using npx,
npx --yes genaiscript run gcm
This command will run the script, and guide you through the process of generating and committing a Git message using AI, making your commits more informative and consistent.
You can wrap this command in a gcm.sh
file or in your package script
section in package.json
:
{
"devDependencies": {
"genaiscript": "..."
},
"scripts": {
"gcm": "genaiscript run gcm"
}
}
Then you can run the script using:
npm run gcm
Acknowledgements
This script was inspired from Karpathy's commit message generator.
Top comments (1)
Wow, this is a fantastic approach to streamline the process of generating Git commit messages! Utilizing AI to ensure concise and informative commits is a game-changer, especially for teams looking to maintain consistency in their repositories. The step-by-step breakdown of the script and its seamless integration with Node.js showcases how practical and user-friendly this solution is. I can already see this becoming an essential tool in my daily workflow. Kudos to the creators for this innovation! ๐