6

我希望能够在 git repo 中保留两个单独的分支,即使这些分支可能包含相似的内容,也不会意外合并。

是否有强制分支在 git 中保持独立的技巧?那是假设我有分支A和分支B,类似的事情git merge B //assuming A is checked out会失败。

这里出现了问题,因为在创建我正在开发的网站的存储库时,我需要分支的HEAD始终是稳定网站的当前状态。

如有必要,我需要在开发分支上进行任何开发提交,主题分支从开发分支中分离出来。

 C1-C2                        master
     \
     C3-C4-C5-C6-C9-C10-C11   development
               \
                C7-C8-C12     topic/HEAD

我需要确保主分支和其他分支之间发生意外合并的可能性很小。

因此,我正在寻找一种方法来“介入”与主分支的合并以询问“此合并将在网站上上线,您确定要这样做吗?” 只有在我确认合并后才会通过。

我想这种情况只与代码不需要编译即可运行的 Web 开发人员相关,并且可能会在实时安装中提取稳定网站的副本。

4

2 回答 2

5

请注意,带有自动提交的 git merge不会调用该pre-commit钩子。请参阅“git merge自动提交不会触发预提交挂钩

直接合并调用commit_tree,因此绕过标准提交挂钩。

补丁正在进行中。

于 2012-10-16T11:28:02.870 回答
4

我相信你能做到这一点的唯一方法是使用pre-commit hook。从手册页:

这个钩子由 git commit 调用,可以用 --no-verify 选项绕过。它不带参数,并在获取建议的提交日志消息并进行提交之前调用。从此脚本中以非零状态退出会导致 git 提交中止。

所以,如果你真的想要,你可以编写一个预提交钩子来检查当前分支和你试图合并的分支,如果它是你不想要的那对,则以非零状态退出。在我的脑海中,我能想到的检查您尝试合并的分支的唯一方法是检查文件.git/MERGE_MSG并解析第一行。(另一种方法是.git/MERGE_HEAD告诉你正在合并的 SHA1,但没有记录它是哪个分支,所以如果两个分支在同一个地方,你就不走运了。

pre-commit 钩子显然不是为快进合并运行的;我怀疑是否真的有任何方法可以防止这种情况发生。但大概如果你阻止分支被合并,就永远不会有快进的尝试。

于 2010-10-30T23:41:58.830 回答