![找出在prepare-commit-msg鉤子中合併的提交](https://rvso.com/image/1452859/%E6%89%BE%E5%87%BA%E5%9C%A8prepare-commit-msg%E9%89%A4%E5%AD%90%E4%B8%AD%E5%90%88%E4%BD%B5%E7%9A%84%E6%8F%90%E4%BA%A4.png)
我嘗試創建一個prepare-commit-msg
適用於合併提交的掛鉤。該腳本傳遞以下參數.git/MERGE_MSG
, merge
。
我需要獲取合併提交的哈希或分支名稱(對於正常的非章魚合併)。我知道我可以git rev-parse MERGE_HEAD
獲取哈希值或name-rev --name-only MERGE_HEAD
獲取分支名稱(如果有)。
但是,似乎是prepare-commit-msg
在創建 MERGE_HEAD 之前調用的。除了解析自動產生的訊息之外,還有其他方法可以知道合併了哪個提交嗎?
我正在使用 git 2.4.0。
答案1
在自訂合併驅動程式中,可以從環境變數中擷取要合併到(目標)的分支的名稱,git symbolic-ref HEAD
以及要合併到(來源)的分支的名稱
GITHEAD_<SHA>
,
這是一個範例腳本片段:
# retrieve merged branch name from an env var GITHEAD_<sha>=<branchName>
# we cannot use a sym ref of MERGE_HEAD, as it doesn't yet exist
gitHead=$(env | grep GITHEAD) # e.g. GITHEAD_<sha>=release/1.43
# cut out everything up to the last "=" sign
source="${gitHead##*=}"
# retrieve base branch name from a sym ref of HEAD
branch=$(git symbolic-ref HEAD) # e.g. refs/heads/master
# cut out "refs/heads"
destination="${branch#refs/heads/}"
echo "Merging from $source into $destination"