1

我对 Git 还很陌生,但我还是想办法解决它,而且基本上一切都按照我希望的方式工作。我刚刚遇到了一个涉及 Git、Bitbucket 和经常被引用的“成功的 Git 分支模型”的问题。

我有我的 web 项目的本地副本,并使用 Mamp Pro 在本地进行开发。就像我说的那样,我将自己定位于“一个成功的 Git 分支模型”,因为它似乎经过深思熟虑,并且经常在网络上的许多 Git 文章中被引用。

当我完成修补程序或新功能时,我推送到 Bitbucket,然后正在运行我使用 FTPloy ( http://ftploy.com/ ) 创建和管理的 POST Hook。

现在,当我因为网站上的某些内容无法正常工作而想要进行修补程序时,我会这样做,假设 Master 和 Staging 已同步并且是最新的:

$ git checkout -b hotfix-5.0.20 master

然后我解决问题并提交它。Successl Branching Modell 现在说应该首先将修复合并回主控。我在这里更改了工作流程,因为我宁愿首先合并回 Development 然后推送它,因为这反过来会更新 dev.domain.com,这是我在实际 Liveserver 上运行的暂存环境。我想这样做是为了能够检查一切是否真的固定(而不是反过来破坏其他任何东西)。

所以我这样做:

$ git checkout dev
Switched to branch 'dev'
$ git merge --no-ff hotfix-5.0.20
Merge made by recursive.
(Summary of changes)
$ git push origin dev

然后我检查 Dev 中的所有内容,如果一切正常,我会这样做:

$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-5.0.20
Merge made by recursive.
(Summary of changes)
$ git push origin master

然后我将删除修补程序分支。

现在,让我失望的是:

当我完成上述步骤后进入 Bitbucket 并单击“Branches”时,Bitbucket 告诉我开发分支是一个 Commit behind 和一个 Commit ahead。然后,当我单击 Dev 分支并将其与 Master 同步时,Bitbucket 会创建一个新的 Commit 并将 Dev 与 Master 合并。当我进入最后一次提交时,不会显示任何代码更改,所以它基本上是一个空提交。

然后我必须拉入我的本地 Git 目录,从那里开始一切都是同步的并且是最新的。

现在,就像我说的那样,我对 Git 还很陌生,但我感觉有些地方不对劲。我不想在每次提交后进行手动同步和拉取,如果我忘记这样做,我最终会出现不同步的分支(至少在 Bitbucket 中)。

解决方案是否可能像一开始从 Dev 分支而不是 Master 分支一样简单?

期待您的意见,并在此先感谢您!

干杯,马克

编辑/更新

好的,我刚刚尝试准确地跟随但得出了相同的结果。我很确定一定是我做错了什么。请容忍我。我现在这样做了:

$ git checkout -b hotfix-5.0.21 master

做了我的改变,提交了他们。

$ git checkout master
$ git merge --no-ff hotfix-5.0.21

然后

$ git checkout development
$ git merge --no-ff hotfix-5.0.21

然后

$ git branch -d hotfix-5.0.21

最后

$ git push

Bitbucket 现在再次显示后面的东西,前面的东西...... :(

4

1 回答 1

2

如果您查看您的存储库,您会看到合并命令创建了两个提交。

一个提交是当您将修补程序合并到 dev 中时。另一个是当您将修补程序合并到 master 中时。所以因为你有两个不同的提交,BitBucket 显示不同步。

您应该从 master 创建一个 hotfix 分支(您做了),独立测试它,然后合并回 master。当您通过将其合并回 dev 进行测试时,您正在测试可能是不同的代码库。一旦您确定修补程序适用于您的生产代码,然后部署它并寻求将修补程序应用于开发。

nvie指定的唯一例外是发布分支是否存在。

您可能还想使用git-flow为您管理此过程。

于 2013-11-14T12:48:34.760 回答