【问题标题】:Git Workflow leads to Unsyncronized Branches on BitbucketGit 工作流导致 Bitbucket 上的非同步分支
【发布时间】:2013-11-27 11:28:38
【问题描述】:

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

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

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

现在,当我因为网站上的某些内容无法运行而想要进行修补程序时,我会这样做,假设 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 现在再次显示后面的东西,前面的东西...... :(

【问题讨论】:

    标签: git branch bitbucket git-flow


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 好吧,我明白了。谢谢。最后一个问题:远程 Dev 上的测试应该只在进行更大的更改时才应该进行,或者实际上只有在进行较大的更改时才需要进行测试,然后应该将其作为一个“功能”,从 Dev 分支出来,对吗?
    • 完全不相关。考虑问另一个问题。可以给出许多不同的意见。
    • 如果您对我的回答感到满意,请务必将其标记为正确。
    • 呃,不,我真的没有工作。请考虑查看我的更新。
    • 没有什么可以“工作”的。分支最终将不同步,因为您将有两个不同的合并提交。他们可以不同步。
    猜你喜欢
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2020-01-31
    • 2012-03-05
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多