如何在Git的prepare-commit-msg钩子中获取父提交名称?
在Git prepare-commit-msg钩子中获取父提交列表
prepare-commit-msg钩子的传入参数里确实没有父提交信息,但可以通过Git命令直接获取不同场景下的父提交,以下是具体方法:
合并操作场景
如果钩子的第二个参数是merge(说明当前是合并提交),可以用这些命令获取父提交:
- 获取所有父提交(包括章鱼合并的多个父):
git rev-parse HEAD^@ - 获取第一个父提交(当前分支的最后一次提交):
git rev-parse HEAD^1 - 获取第二个父提交(被合并分支的最后一次提交):
git rev-parse HEAD^2
其他常见场景
- 普通提交:只有一个父提交,用
git rev-parse HEAD^或git rev-parse HEAD~1就能拿到 - 修正提交(amend):可以通过钩子第三个参数的原提交SHA,用
git rev-parse $COMMIT_SHA^获取原提交的父提交 - 变基过程:变基时可以用
git rev-parse ORIG_HEAD获取变基前的HEAD,结合上下文判断父提交
钩子脚本示例
比如写一个bash版的prepare-commit-msg钩子,自动把父提交信息追加到提交消息里:
#!/bin/bash COMMIT_MSG_FILE="$1" COMMIT_TYPE="$2" COMMIT_SHA="$3" case "$COMMIT_TYPE" in merge) PARENTS=$(git rev-parse HEAD^@) echo -e "\n合并父提交:$PARENTS" >> "$COMMIT_MSG_FILE" ;; commit) PARENT=$(git rev-parse HEAD^) echo -e "\n父提交:$PARENT" >> "$COMMIT_MSG_FILE" ;; amend) PARENT=$(git rev-parse "$COMMIT_SHA"^) echo -e "\n原提交父提交:$PARENT" >> "$COMMIT_MSG_FILE" ;; esac
内容的提问来源于stack exchange,提问作者Bill Tarbell
相关产品推荐
相关产品推荐

