控制怪胎:提交被拒绝。 Foxtrot在Bitbucket中不允许合并

时间:2019-03-14 05:31:48

标签: git bitbucket git-pull

Control Freak: Commit rejected. Foxtrot merges not allowed的确切原因是什么

我们经常收到此错误,这是由于用户在提交时组合了pullrebaseamend造成的吗?

需要明确说明以永久消除此问题。我知道并理解分支已经分散并且失去了踪迹,但是用简单的语言确切地导致这种情况的原因是非常明显的

当我们看到此错误时,这是​​我们重新设置基准的时间杀手。我们正在手动挑选更改以消除此问题。

如何识别提交类型,就像之后的正确提交一样 重新设置,拉动或修改,而正是通过 谁?

我们要教育开发人员摆脱类似的提交错误 今后。很想听听最佳做法。

还想了解使用git-bash / source-tree等组合工具是否有任何理由吗?

我们能不能关闭这个原因?

enter image description here

2 个答案:

答案 0 :(得分:2)

Foxtrot merges有关,在BitBucket上特别禁止:

  

Foxtrot合并是特定的git commit序列。一个特别有害的序列。在开阔的,开阔的草原上,序列看起来像这样:

https://developer.atlassian.com/blog/2016/04/stop-foxtrots-now/02-foxtrot.png

  

但是狐步舞在露天很少见。它们隐藏在树枝之间的树冠中。我称它们为狐步舞,是因为当它们被扑中时,它们看起来像是同名舞厅舞的脚步:

https://developer.atlassian.com/blog/2016/04/stop-foxtrots-now/foxtrot-redrawn.png

  

狐步舞合并是不好的,因为它们会改变原籍/母校的祖父母历史。

     

合并提交的父级是有序的。第一父是HEAD。第二个父级是您使用git merge命令引用的提交。

     

您可以这样想:

git checkout 1st-parent
git merge 2nd-parent

如果按下:

https://developer.atlassian.com/blog/2016/04/stop-foxtrots-now/05-foxtrot-pushed.png

答案 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”引起问题的。