![](/img/trans.png)
[英]Is there a `git log` summary that includes merge (only) and non-merge commits?
[英]How can I allow git merge commits to master but prevent non-merge commits?
我有一個Git預提交鈎子,除非被覆蓋,否則我無法承諾掌握,以鼓勵在分支上進行開發。
但是,我想自動允許合並提交掌握。 有沒有辦法從我的預提交鈎子腳本中識別合並提交? 該腳本如下所示:
#!/bin/bash
BRANCH=`git branch --color=never| grep '^*'|cut -c3-`
if [ "${BRANCH}D" == "masterD" -a "${GIT_COMMIT_TO_MASTER}D" != "trueD" ]
then
echo "Commit directly to master is discouraged."
echo "If you want to do this, please set GIT_COMMIT_TO_MASTER=true and then commit."
exit 1
fi
求助:對於任何尋找剪切和粘貼的人來說,這個鈎子腳本的工作版本是:
#!/bin/bash
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "${BRANCH}" == "master" -a "${GIT_COMMIT_TO_MASTER}" != "true" ]
then
if [ -e "${GIT_DIR}/MERGE_MODE" ]
then
echo "Merge to master is allowed."
exit 0
else
echo "Commit directly to master is discouraged."
echo "If you want to do this, please set GIT_COMMIT_TO_MASTER=true and then commit."
exit 1
fi
fi
我在其中添加了一些注釋,但重要的一點是,在預先提交的掛鈎中,您即將要測試的提交尚不存在,因此您無法計算其父項。
這是你得到的:
如果您使用git commit --amend
來修改合並提交,則預提交掛鈎會照常運行,但它無法真正檢測到這種情況正在發生。 新提交將是合並,但你無法分辨。
如果你使用常規的舊git commit
來創建一個非合並提交,那么文件MERGE_HEAD
將不會存在於git目錄中,你可以告訴它這不會創建一個合並提交。
如果您使用git commit
來完成沖突的合並,則文件MERGE_HEAD
將存在,您可以告訴它將創建合並提交。
如果你正在運行git merge
並且它自己成功,它會在不使用pre-commit鈎子的情況下進行新的提交,所以你甚至不會在這里調用它。
因此,如果你願意允許git commit --amend
在合並時git commit --amend
,你可以接近你想要的東西:只測試$GIT_DIR/MERGE_HEAD
的存在,看看這是否是一個完成的git commit
沖突的合並。 (即使命令在git樹外部運行,使用$GIT_DIR
也是一個技巧$GIT_DIR
設置$GIT_DIR
以便掛機git命令可以正常工作。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.