Control Freak: Commit rejected. Foxtrot merges not allowed
的确切原因是什么
我们经常收到此错误,这是由于用户在提交时组合了pull
,rebase
和amend
造成的吗?
需要明确说明以永久消除此问题。我知道并理解分支已经分散并且失去了踪迹,但是用简单的语言确切地导致这种情况的原因是非常明显的
当我们看到此错误时,这是我们重新设置基准的时间杀手。我们正在手动挑选更改以消除此问题。
如何识别提交类型,就像之后的正确提交一样 重新设置,拉动或修改,而正是通过 谁?
我们要教育开发人员摆脱类似的提交错误 今后。很想听听最佳做法。
还想了解使用git-bash / source-tree等组合工具是否有任何理由吗?
我们能不能关闭这个原因?
答案 0 :(得分:2)
与Foxtrot merges有关,在BitBucket上特别禁止:
Foxtrot合并是特定的git commit序列。一个特别有害的序列。在开阔的,开阔的草原上,序列看起来像这样:
但是狐步舞在露天很少见。它们隐藏在树枝之间的树冠中。我称它们为狐步舞,是因为当它们被扑中时,它们看起来像是同名舞厅舞的脚步:
狐步舞合并是不好的,因为它们会改变原籍/母校的祖父母历史。
合并提交的父级是有序的。第一父是HEAD。第二个父级是您使用git merge命令引用的提交。
您可以这样想:
git checkout 1st-parent
git merge 2nd-parent
如果按下:
答案 1 :(得分:0)
避免此问题的最简单方法是始终运行“ git pull --rebase”,而从不运行默认的“ git pull”。这是一篇有关该主题的深入探讨博客文章:Too much fun with "git pull --rebase"
您遇到此问题的原因是,您的公司为Bitbucket安装了免费的Control Freak插件,并且他们为所有分支机构启用了默认的Foxtrot Prevention控件。
如果您使用的是Bitbucket Server 5.5或更高版本,则可以直接从拉取请求屏幕重新设置拉取请求的基础。单击拉动请求屏幕最右侧的“ ...”按钮,“ Rebase”菜单项应该可用。
或者,您可以要求管理员禁用狐步防护。即使是回购管理员也可以执行此操作(不需要全局管理员)。但是我不建议禁用此控件,因为它可以防止提交历史记录混乱。
完全公开:我为Bitbucket Server编写并维护了免费的“ Control Freak”插件。
注意:变基和修改绝对不会引起狐步舞。通常只有默认的“ git pull”会导致foxtrot合并,而“ git pull -r”是一个很好的解决方法。 “ git merge”命令也会导致这种情况,但是在通常情况下需要“ git merge”的情况下使用“ git merge”时,人们很少会偶然创建foxtrot合并。我怀疑99%的时间是“ git pull”引起问题的。