在使用“成功的Git分支模型”时,在Github上会出现提示:“该分支比主分支超前一个提交,但落后一个提交”。

16

我正在处理一个只有一个文件的干净仓库,并且我是唯一的开发者。

我希望按照一个成功的Git分支模型进行开发-发布-主线(develop-release-master)工作流程,因此我执行了以下操作:

注意:请记住,我默认情况下关闭了快进合并(fast forward),因此请将所有merge命令视为merge --no-ff

我的起点是Github。

master分支中:

git add .
git commit -m "Initial commit"
git push origin master
git checkout -b develop

develop分支中,我对该文件进行了更改,然后:

Translated text:

develop分支中,我对该文件进行了更改,然后:

git add .
git commit -m "work in the file"

我准备将其发布为版本号0.0

git checkout -b release-0.0 develop

release-0.0 分支中,我给文件添加了一个版本号。

git add .    
git commit -m "Bumped version 0.0"

我已准备好将此版本合并到主分支。

git checkout master
git merge release-0.0 -m "Releasing v0.0"
git tag -a 0.0 -m "Version 0.0"

......并进入开发。

git checkout develop
git merge release-0.0 -m "Merge release 0.0 into develop"

然后我将 masterdevelop 都推送到 Github 上

git push origin master
git push origin develop

当我在Github上检查develop分支时,它显示:

此分支领先于1个提交,落后于master 1个提交。

master分支没有像这样的信息。

我该怎么办才能解决这个问题?由于它们都与release-0.0合并,因此此时应该让masterdevelop相等。


@TheGeorgeous 的答案是正确的。你在 develop 分支上收到这个消息是因为你的默认分支是 master。当默认分支是 develop 时,你会在 master 分支上收到它而不是在 develop 上。而且消息应该是 “该分支比 develop 分支多提交了 1 次,少提交了 1 次”。 - Dexter
3个回答

8
不会相等,因为默认情况下快进是禁用的。每次合并都会创建一个新的提交,合并提交具有不同的ID。因此,在主分支中的合并提交与在开发分支中的合并提交不同。因此,开发分支具有主分支中没有的提交,而主分支具有开发分支中没有的提交。这就是开发分支中的信息。
至于主分支中不存在该消息的原因是,当将分支与主分支进行比较时才会出现该消息。因此,如果将主分支与主分支进行比较,则不需要该消息。
一种解决方法是启用快进,并显式地在发布和主分支中创建合并提交,然后继续快进开发分支。另一种选择是在每次合并到主分支后重新定位开发分支。如何处理完全取决于您的工作流程和代码,纯属个人选择。
此外,只要分支中的代码完全符合您的要求,那么存在该消息并不是您应该担心的事情。

8

补充其他答案:

原始的 git-flow 自2012年以来就没有再开发过,已经被git-flow AVH edition在许多地方取代(包括Ubuntu repositoriesGit for Windows)。

AVH版引入的一个区别是最终合并是将master *合并到develop而不是将release合并到develop

这使得master成为develop的直接父级,并应该消除您看到的消息中的一部分;只剩下“1个提交领先”的信息。这也使得验证主和开发没有意外分歧稍微容易一些。

* 更确切地说,是将新标签(在主分支上)合并到develop。


2
由于您使用了 --no-ff,每次合并将成为一个不同的提交。当您将 release-0.0 合并到 develop 分支和 master 分支时,合并提交将不同。下面是其效果:

commits

如您所见,develop 分支有一个提交 (Merge release 0.0 into develop),此提交在 master 分支中不存在(不可达);master 分支有一个提交 (Releasing v0.0),此提交在 develop 分支中也不存在。这就是 GitHub 的那个提示消息所表达的含义,这完全没问题(内容相同但提交不同)。
如果您想使用 git flow,请看一下 https://github.com/nvie/gitflow,它会对您有很大的帮助。

是的,我只是想指出有一些辅助脚本(由博客文章的作者nvie编写)可以帮助你快速入门。 - 1ed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接