prepare-commit-msgフックでマージされたコミットを把握する

prepare-commit-msgフックでマージされたコミットを把握する

マージコミットに機能するフックを作成してみましたprepare-commit-msg。スクリプトには、次の引数が渡されます.git/MERGE_MSGmerge

マージされたコミットのハッシュまたはブランチ名を取得する必要があります (通常の非オクトパス マージの場合)。git rev-parse MERGE_HEADハッシュを取得したり、name-rev --name-only MERGE_HEADブランチ名 (ある場合) を取得したりする方法があることはわかっています。

ただし、MERGE_HEAD が作成される前に呼び出されるようですprepare-commit-msg。自動生成されたメッセージを解析する以外に、どのコミットがマージされたかを知る方法はありますか?

私は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"

ソース :カスタム Git マージ ドライバーでブランチ名を取得するにはどうすればいいですか?

関連情報