git - 如何避免git中的狐步 merge

标签 git bitbucket

我们最近遇到了一种情况,无法推送代码并收到错误消息,指示“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/

相关文章:

java - 测试连接时出现 Bitbucket 错误 : “javax.net.ssl.SSLHandshakeException: General SSLEngine problem”

bitbucket - 在 Bitbucket wiki 页面中调整图像大小

python - 推送到 Git 存储库时如何设置自动部署到 AppEngine

git - 告诉 TortoiseGit pull 所有原点

git - 如何将没有点的文件(所有无扩展名的文件)添加到 gitignore 文件?

命令行中的 Git 不起作用,但使用 git 客户端(如 SmartGit)可以

python 脚本执行 git 命令并在 html 页面上显示输出

git - 不要使用 GIT 覆盖 Azure 上的配置文件

git - 更新文件夹中的所有 repo 协议(protocol)?

git - 长期保存 git stash 修订版