GIT:我怎样才能阻止foxtrot在我的'master'分支中合并?

foxtrot合并是一种合并,其中'origin / master'作为第二个(或更晚的)父级合并,如下所示:


提交'D'是foxtrot合并,因为'origin / master'是它的第二个父级。


提交'D'是foxtrot合并,因为'origin / master'是它的第二个父级。注意此时来自“origin / master”的第一父历史如何包含提交“B”。


但是在我的git repo中,我需要所有涉及'origin / master'的合并来保持'origin / master'作为第一个父级。不幸的是,git在评估提交是否符合快进条件时并不关心父级。这会导致我的主分支上的第一个父历史记录有时会丢失曾经存在的提交(例如,输出“git log --first-parent”)。


以下是推送前面图表中提交“D”时发生的情况:


我怎样才能防止这种推动? 推送foxtrot合并后,'origin / master'的第一父历史不再包含提交'B'!


我怎样才能防止这种推动?推送foxtrot合并后,'origin / master'的第一父历史不再包含提交'B'!


显然没有提交或工作实际上丢失,只是在我的环境中我真的需要“git log --first-parent”作为一个稳定的提交累积记录 - 如果你愿意,一种“一次写入读 - 许多“(WORM)数据库。我有脚本和进程使用“git log --first-parent”来生成更改日志和发行说明,以及管理我的票证系统(JIRA)中的票证转换。Foxtrot合并破坏了我的脚本!


是否有某种预接收挂钩我可以安装在我的git存储库中以防止foxtrot合并被推送?


ps使用http://bit-booster.com/graph.html生成此stackoverflow问题中的提交图。


莫回无
浏览 1285回答 3
3回答

神不在的星期二

这是一个钩子代码,可以满足您的要求:pre-receive hook#!/bin/sh# Check to see if this is the first commit in the repository or notif git rev-parse --verify HEAD >/dev/null 2>&1then    # We compare our changes against the previous commit    against=HEAD^else    # Initial commit: diff against an empty tree object    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904fi# Redirect output to screen.exec 1>&2# Check to see if we have updated the master branchif [ "$refname" eq "refs/heads/master" ];then    # Output colors    red='\033[0;31m';    green='\033[0;32m';    yellow='\033[0;33m';    default='\033[0;m';    # personal touch :-)    echo "${red}"    echo "                                         "    echo "                   |ZZzzz                "    echo "                   |                     "    echo "                   |                     "    echo "      |ZZzzz      /^\            |ZZzzz  "    echo "      |          |~~~|           |       "    echo "      |        |-     -|        / \      "    echo "     /^\       |[]+    |       |^^^|     "    echo "  |^^^^^^^|    |    +[]|       |   |     "    echo "  |    +[]|/\/\/\/\^/\/\/\/\/|^^^^^^^|   "    echo "  |+[]+   |~~~~~~~~~~~~~~~~~~|    +[]|   "    echo "  |       |  []   /^\   []   |+[]+   |   "    echo "  |   +[]+|  []  || ||  []   |   +[]+|   "    echo "  |[]+    |      || ||       |[]+    |   "    echo "  |_______|------------------|_______|   "    echo "                                         "    echo "                                         "    echo "      ${green}You have just committed code ${red}  "     echo "      Your code ${yellow}is bad.!!!      "    echo "      ${red} Do not ever commit again    "    echo "                                         "    echo "${default}"fi;# set the exit code to 0 or 1 based upon your needs# 0 = good to push# 1 = exit without pushing.exit 0;
打开App,查看更多内容
随时随地看视频慕课网APP