关于利用git合代码版本的疑问?
我现在的情况是我现在的项目在git有三个分支(test,uat,production),test环境没问题合并到uat代码,uat代码在完成测试后合并到production分支进行上线部署。
我现在在test进行项目需求的开发,但是在开发过程中我遇到需要修改线上提出的bug,因此我在test分支上有多次提交(比如提交未开发完毕的需求代码,或者提交修改好的线上bug的代码,或者提交其他优先级不高的测试修改)
现在比如说我刚修改的bug优先级比较高,我需要把现在这个bug修复的代码和之前的部分优先级不高的代码发布到线上测试环境(不包括我本次增加的需求代码),这次线上测试环境不涉及当前增加的需求代码的打包,但是我之前都是在test分支上进行开发,导致我现在test分支中以及进行好几次代码更新,我该怎么样操作能够比较好的将上次uat上的代码和本次需要上线的代码进行合并测试呢?
或者像你们开发的流程是怎么样的?怎么操作自己的代码仓库?
我提供两个解决方案,一个是创建bugfix分支,一个是不创建分支,给你参考一下将高优先级的bug修复代码合并到uat分支,而不包括未完成的需求代码。以下是详细的步骤总结:
备注:挑选提交这个如果不会使用,我也给个步骤放最后给你参考
从当前的test
分支创建一个新的分支,比如bugfix
,用于处理高优先级的bug修复。
git checkout -b bugfix
使用git cherry-pick
命令,将需要的提交(即高优先级bug修复的提交)从test
分支挑选到bugfix
分支。你可以通过git log
查看提交历史,找到需要的提交哈希值。
git cherry-pick <commit-hash>
切换到uat
分支,并将bugfix
分支合并到uat
分支。
git checkout uat
git merge bugfix
将uat
分支的更改推送到远程仓库。
git push origin uat
在uat
分支上进行测试,确保bug修复没有引入新的问题。如果测试通过,可以将uat
分支合并到production
分支进行上线部署。
git checkout production
git merge uat
将production
分支的更改推送到远程仓库。
git push origin production
通过这些步骤,你可以在不影响未完成需求的情况下,将高优先级的bug修复代码快速部署到生产环境。
在test
分支上,将当前未完成的更改暂存起来。
git stash
使用git cherry-pick
命令,将需要的提交(即高优先级bug修复的提交)从test
分支挑选到uat
分支。你可以通过git log
查看提交历史,找到需要的提交哈希值。
git checkout uat
git cherry-pick <commit-hash>
将uat
分支的更改推送到远程仓库。
git push origin uat
在uat
分支上进行测试,确保bug修复没有引入新的问题。如果测试通过,可以将uat
分支合并到production
分支进行上线部署。
git checkout production
git merge uat
将production
分支的更改推送到远程仓库。
git push origin production
回到test
分支,并恢复之前暂存的更改。
git checkout test
git stash pop
通过这种方式,可以在不创建新分支的情况下,将高优先级的bug修复代码合并到uat
和production
分支,同时保留你在test
分支上的未完成更改。
使用
git cherry-pick从
test分支挑选提交并将其应用到
uat分支:
首先,你需要查看test
分支的提交历史,以找到你需要挑选的提交。你可以使用以下命令查看提交日志:
git log --oneline
找到你需要挑选的提交,并记下它们的哈希值。例如:
a1b2c3d 修复高优先级的bug
e4f5g6h 添加新功能(不需要挑选)
i7j8k9l 另一个bug修复
切换到你想要将提交应用到的分支,比如uat
分支:
git checkout uat
git cherry-pick
挑选提交使用git cherry-pick
命令,将需要的提交从test
分支挑选到uat
分支。你可以一次挑选一个提交,也可以一次挑选多个提交。以下是挑选单个提交的命令:
git cherry-pick a1b2c3d
如果你有多个提交需要挑选,可以依次执行git cherry-pick
命令,或者一次性挑选多个提交:
git cherry-pick a1b2c3d i7j8k9l
在挑选提交的过程中,如果遇到冲突,Git会提示你解决冲突。你需要手动编辑冲突的文件,解决冲突后,使用以下命令标记冲突已解决并继续挑选:
git add <冲突文件>
git cherry-pick --continue
挑选提交完成后,将uat
分支的更改推送到远程仓库:
git push origin uat
你的问题有点乱,简单读了读,大概了解到
1.你有三个分支test
、uat
、production
2.他们是逐步递进的test
-->uat
-->production
,也就是说production
是基线.
3.你可能需要修复线上bug,也就是hotfix
你其他的我没看明白,我给你几个我这么多年开发带团队或者说我分支管理的经验。
你要搞清楚几个概念:
production
就是基线,该分支代码代表了当前唯一的稳定版,所有代码都必须以它为基础开发。test
和uat
分支必须从基线分支派生,且定期回溯。
你的这个例子中,三个环境,三个分支,永远是test
-->uat
-->production
,大家每次开发都是从test
为基础开发,长此以往导致的问题就是,test
、uat
、production
三个分支差异越来越大,合并越来越困难。
相信你曾经听说过,MIUI的测试版比稳定版还要稳定,大概率就是这个原因。
production
派生,记为feat-A
feat-A
二次派生自己的子分支开发需要合并时,从自己的子分支合并到feat-A
,并从production
拉取最新,在test
环境上进入提测流程
如果有开发环境,此处应该 合并到
feat-A
,并从production
拉取最新,在dev环境上自测, 后再进入提测流程有可能多个团队同时开发且共用环境,这时验证,应该仅部署自己分支验证,避免别人的影响,也避免带给别人影响,像阿里,腾讯的devops都是流水线的方式,从基线集成运行的。
feat-A
派生bug-A
分支修复修复完成后,将bug-A
合并到feat-A
再次在test
环境上验证,仍有Bug,重复4-5
整个开发生命周期中,每人有一个自己的feat
分支,一旦该分支合并,应当作废,每次从祖先分支(feat-A
)拉取新分支
production
拉取最新的变更,解决冲突后,记为uat-A
分支uat
环境上使用分支uat-A
预发布验证uat-A
派发分支uat/bug-A
,修复uat/bug-A
合并到uat-A
再次在uat
环境上验证,仍有Bug,重复88-9uat-A
合并到production
,上线hotfix-A
修复bug,在uat
环境上仅部署hotfix-A
分支验证
UAT环境若无法复现该问题,应该使用灰度,或者绿环境
仅部署hotfix-A
是为了排除别的分支带来的干扰,同时不能携带多余的分支上线
hotfix-A
合并到production
上线几个解释:
1.一个功能开发完,这个feat
分支就作废了
2.这个流程走下来,发现实际上test
和uat
分支根本不存在,实际也不应该存在
3.如果环境是共用的,test
和uat
分支隐式是存在,但不能作为基线,每个功能一上线,这俩分支必须重置为production
,一切以基线为准。
4.上述的分支名都是随意起的,完全可以按照你自己的开发规范。
如果你按照上述流程,不管是merge
还是rebase
方式,都是非常顺畅的,最终的扯皮阶段,只有将uat-A
合并到production
上时才有。
### 回答
在你的情况下,你可以采取以下步骤来将紧急修复的 bug 合并到 UAT 分支进行测试,而不包括未完成的需求代码:
1. **创建一个新的分支用于发布**:
从你当前的 `test` 分支上创建一个新的分支,这个分支将只包含你需要发布到 UAT 的代码。
git checkout test
git checkout -b hotfix-for-uat
2. **回滚或移除不需要的提交**:
在这个新分支上,你需要确保不包含未完成的需求代码。如果可以通过回滚(revert)或手动移除这些提交来清理历史,那就这样做。
例如,如果你知道哪些提交是不需要的,你可以使用 `git revert` 或者手动编辑文件来移除这些更改。
3. **合并到 UAT 分支**:
一旦你的 `hotfix-for-uat` 分支准备好,你可以将其合并到 `uat` 分支。
git checkout uat
git merge hotfix-for-uat
4. **测试和验证**:
在 UAT 环境中测试这些更改,确保 bug 被修复且没有其他问题。
5. **清理**:
在确认 `uat` 分支没有问题后,你可以选择删除 `hotfix-for-uat` 分支,或者保留它以备将来参考。
git branch -d hotfix-for-uat
6. **回到 `test` 分支继续开发**:
回到你的 `test` 分支,继续你的需求开发和其他工作。
git checkout test
### 开发流程建议
- **使用特性分支**:对于每个新功能或 bug 修复,都从主分支(如 `test` 或 `develop`)创建一个新的特性分支。这有助于保持主分支的干净和稳定。
- **持续集成和持续部署**:使用 CI/CD 工具自动构建和测试你的代码,这可以帮助你更早地发现和解决问题。
- **定期合并**:定期将你的特性分支合并回主分支,以避免合并冲突和长期未解决的依赖问题。
- **代码审查**:在合并代码之前进行代码审查,这可以确保代码质量并促进团队之间的知识共享。
通过这些步骤和流程建议,你可以更有效地管理你的 Git 分支和代码版本。
在Xcode中,持续集成是自动的并且简化Mac和iOS应用程序的构建、分析、测试和打包的过程,确保应用程序永远保持可发布状态。在持续集成工作流中,使用Mac上的Xcode本地编写应用并将代码迁入一个代码仓库中。然后将代码发送到Xcode Server进行处理,Xcode Server是由OS X Server提供的一个服务。在开发Mac的Xcode中,将运行在server上的bot程序设置好。这些
translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/continous_integration.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e PX4 Continuous Integration PX4 builds and
问题内容: 我正在使用Travis-CI为我正在研究的一些Java开源项目提供持续的集成构建。 通常这可以顺利进行,但是当POM指定GPG签名时我遇到问题,例如 这将导致Travis构建失败-显然是因为它在运行时没有可用的密码。有关示例,请参见此构建。 配置Maven和/或Travis以跳过针对CI测试版本的GPG签名,但在执行适当的发行版本时仍执行GPG签名的最佳方法是什么? 问题答案: 您需要
我们做的还不够好,先占个坑。 欢迎贡献章节。
注意有关编写测试的建议, 请参阅 Testing Your Code. Why? 与 Kent Beck 一起撰写关于 持续集成 (简称 : CI ) 的 Martin Fowler 对 CI 进行了如下的描述: 持续集成是一种软件开发实践,团队成员经常整合他们的工作,通常每个人至少每天集成一次 - 导致每天进行多次集成。 每个集成都通过自动构建(包括测试)进行验证,以尽快检测集成错误。 许多团队
对应于 Ruby 的一个或多个版本,你很轻松就可以测试你的网站构建。以下指引将展示怎样在 Travis 上建立一个免费的,集成了处理 pull 请求的 GitHub 的构建环境。如果你使用私有代码库的话,也有相应的付费选择。 1. 启用 Travis 以及 Github 启用 Travis 来构建你的 Github 代码库非常简单: 前往你在 travis-ci.org 的个人档案: https:
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。由于我们的代码托管在github上面,所以选择Travis CI来做持续集成是一个不错的选择。 要触发构建工作,需要在项目根目录下面添加一个.travis.yml的文件: sudo: required services: - docker e
虽然以下示例中使用在Travis CI,但原则上应该,也可以直接转移到其他持续集成提供商. 以下是Travis CI的.travis.yml示例,确保配置了mdbook build和mdbook test运行成功。加快CI运转时间的关键是缓存mdbook的安装,以便您可以不用每次CI运行就编译一次mdbook。 language: rust sudo: false cache: - carg