git - 如何从我们的 GOG 存储库中的旧提交创建一个分支,将其推送以制作标签,然后将更改合并到 Master 上而不丢失我们的更改?
问题描述
我们的团队致力于一个遗留应用程序,并且相对较小,并且在使用 GIT 存储库来控制我们的源代码方面是新的。我们没有 Git Master,我们真的没有办法让我们的更改保持井井有条。
结果,我们在成功发布后将一些更改推送到我们的 Master 分支 - 只是发现该版本现在需要热修复。
我们不想推动我们正在为下一个版本所做的更改 - 所以理想情况下,我们希望:
- 让一个人从 GOG 中提取最后一次提交(带有我们发布的标签)
- 更改代码以修复生产中的错误
- 推送更改并创建一个标签,以便我们的发布团队可以部署它
- 将该更改合并到我们的 Master 分支,这样我们的下一个版本的工作不会丢失,但会应用修复的更改
这是我们第一次尝试对代码进行实时修复——我已经看到了一些建议,但其中大多数都涉及基于尚未推送的开发人员分支。作为一个已经将更改推送到 Master 并希望将修复应用于旧推送的团队,我们能做些什么?
解决方案
你描述的基本正确。
- 确定现在在生产中的提交。假设它是
abc123f
. 它也可以是与提交相同的标签(提交、分支、标签 - 都是 refs。分支是移动目标,但提交和标签是不可变的)。 - 在 repo 中,检查提交:
git checkout abc123f
- 创建您的修补程序分支: git checkout -b hotfix-branch
- 进行更改、测试和提交。
- 标记您最终的提交并推送标记
- 给发布团队打标签
git checkout master; git fetch --all; git pull
获得最新的主人git merge hotfix-branch
随后git push
将添加修补程序并将其推送到上游主站。
请记住,您始终可以使用git diff
比较分支来检查您的工作并进行验证。我经常这样做,您也应该这样做,因为对您的更改充满信心是版本控制的主要好处!8
推荐阅读
- rest - 使用 REST API 和 powershell 向多个收件人发送电子邮件
- java - 如何在 JAR 中进行 JPA?
- python - Python 强制阻塞循环操作(for)
- html - 带有图像弹出查看器的 html css 画廊网格
- php - PHP 和 SSL 中的 YouTube API
- symfony - 用于实体映射的 API 平台配置在最新版本中位于何处?
- asp.net-core-webapi - 用新的迁移 asp.net 核心覆盖数据库
- php - Laravel 5.6 有限的登录尝试不起作用(Throttles Logins)
- c# - C# - EF Lambda Include 用于选择 2 个类并从第二个类中排除属性
- c# - 在 DbContext 中创建模型后添加实体类型