我对 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 现在再次显示后面的东西,前面的东西...... :(