我们最近遇到了一种情况,无法推送代码并收到错误消息,指示“Control Freak... FoxTrot Merge”
基本上,这是我们的源代码树-
分支 - A(这是原始/开发的子项,与原始/主控无关) 从 A 创建了另一个分支 B - 继续工作 从 C 创建另一个分支
在几次提交之后的某个时刻,它不会让我们将任何提交推送到 C 并提示 FoxTrot merge 。 我们检查了 bitbucket(企业)有一个钩子(Hook)阻止了它。
我们通过创建另一个分支 D 绕过了这个(因为我们确实必须推送更改)。
我们不知道我们是如何陷入这种境地的。 将来我们如何避免这种情况?
最佳答案
我将把这个作为重复项来结束,但“重复”问题本身只是定义狐步 merge ,而没有解释为什么会发生。
它们的发生是因为 git pull
意味着 git fetch && git merge
而第二个 git merge
是 一个“狐步 merge ”。它将您的工作视为主分支,以及其他人的工作,在您开始您的master
之后完成工作,作为次要的、可能不是主分支。该钩子(Hook)的目标是防止人们像这样在 master 上工作并使用 git pull 。
为了避免发生这种事情,您可以使用这个简单的规则(也许有点太简单,但它有效):永远不要自己在 master 上做任何工作。
也就是说,之后:
git clone <url>
cd <clone>
您开始工作:
git checkout -b feature/tall
开发名为tall
的新功能。你,Alice——嗯,这可能不是你的真实名字,但在这个例子中我有三个人在做事情,所以我给你分配了名字“A”——用你自己的方式完成所有工作feature/tall
,而 Bob 和 Carol 在他们自己的功能分支上完成所有工作,无论他们的功能名称是什么。
当你的东西准备好后,你可以:
git checkout master && git fetch && git merge
或者,如果您喜欢git pull
(我不喜欢):
git checkout master && git pull
您现在已准备好 merge 您的功能:
git merge feature/tall
merge 完成后(如有必要,解决任何 merge 冲突后),您可以再次推送:
git push
并且您的作品显示为非“狐步 merge ”。一旦您的工作成功 merge 并推送,您就可以删除您的功能分支。同时,Bob 和 Carol 可以继续开发他们的功能,或者,如果他们比您先完成,您的 merge 将 merge 到他们的 merge 之上。
关于git - 如何避免git中的狐步 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55155810/