为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Git
莫回无 2019-09-02 15:48:00
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问题中的提交图。
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这是一个钩子代码,可以满足您的要求:


pre-receive hook

#!/bin/sh


# Check to see if this is the first commit in the repository or not

if git rev-parse --verify HEAD >/dev/null 2>&1

then

    # We compare our changes against the previous commit

    against=HEAD^

else

    # Initial commit: diff against an empty tree object

    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904

fi


# Redirect output to screen.

exec 1>&2


# Check to see if we have updated the master branch

if [ "$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;


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 1280 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信