[{"data":1,"prerenderedAt":849},["ShallowReactive",2],{"/en-us/topics/version-control/what-are-gitlab-flow-best-practices":3,"navigation-en-us":192,"banner-en-us":589,"footer-en-us":599,"next-steps-en-us":839},{"id":4,"title":5,"body":6,"category":6,"config":6,"content":7,"description":6,"extension":184,"meta":185,"navigation":186,"path":187,"seo":188,"slug":6,"stem":190,"testContent":6,"type":6,"__hash__":191},"pages/en-us/topics/version-control/what-are-gitlab-flow-best-practices/index.yml","",null,[8,22,30,151,173,182],{"type":9,"componentName":9,"componentContent":10},"CommonBreadcrumbs",{"crumbs":11},[12,16,20],{"title":13,"config":14},"Topics",{"href":15},"/topics/",{"title":17,"config":18},"Version control",{"href":19},"/topics/version-control/",{"title":21},"What are gitlab flow best practices",{"type":23,"componentName":23,"componentContent":24},"CommonArticleHero",{"title":25,"text":26,"config":27},"What are GitLab Flow best practices?","GitLab Flow best practices help streamline software development using structured branching, continuous integration, and automated deployment techniques.\n",{"id":28,"twoColumns":29},"what-are-gitlab-flow-best-practices?",false,{"type":31,"componentName":31,"componentContent":32},"CommonSideNavigationWithTree",{"anchors":33,"components":80},{"text":34,"data":35},"On this page",[36,40,44,48,52,56,60,64,68,72,76],{"text":37,"config":38},"Use feature branches rather than direct commits on the main branch.",{"href":39},"#use-feature-branches-rather-than-direct-commits-on-the-main-branch",{"text":41,"config":42},"Test all commits, not only ones on the main branch.",{"href":43},"#test-all-commits-not-only-ones-on-the-main-branch",{"text":45,"config":46},"Run every test on all commits. (If tests run longer than 5 minutes, they can run in parallel.)",{"href":47},"#run-every-test-on-all-commits-if-tests-run-longer-than-5-minutes-they-can-run-in-parallel",{"text":49,"config":50},"Perform code reviews before merging into the main branch.",{"href":51},"#perform-code-reviews-before-merging-into-the-main-branch",{"text":53,"config":54},"Deployments are automatic based on branches or tags.",{"href":55},"#deployments-are-automatic-based-on-branches-or-tags",{"text":57,"config":58},"Tags are set by the user, not by CI.",{"href":59},"#tags-are-set-by-the-user-not-by-ci",{"text":61,"config":62},"Releases are based on tags.",{"href":63},"#releases-are-based-on-tags",{"text":65,"config":66},"Pushed commits are never rebased.",{"href":67},"#pushed-commits-are-never-rebased",{"text":69,"config":70},"Everyone starts from main and targets main.",{"href":71},"#everyone-starts-from-main-and-targets-main",{"text":73,"config":74},"Fix bugs in main first and release branches second.",{"href":75},"#fix-bugs-in-main-first-and-release-branches-second",{"text":77,"config":78},"Commit messages reflect intent.",{"href":79},"#commit-messages-reflect-intent",[81,87,93,98,103,108,113,118,123,128,133,138,143],{"type":82,"componentName":82,"componentContent":83},"TopicsCopy",{"text":84,"config":85,"header":86},"GitLab Flow best practices are guidelines for managing source code using GitLab’s version control, issue tracking, and CI/CD tools to ensure efficient, clean, and scalable development workflows. They include using feature branches, testing all commits early, automating deployments based on tags or branches, and maintaining clean commit histories.\n\nWhen software development teams rush to accelerate delivery, they may end up with messy or complex workflows. Organizations that have transitioned from another [version control](/topics/version-control/) system are especially likely to deal with challenging processes that may slow down development. \n\nWhen teams use [GitLab Flow](/topics/version-control/what-is-gitlab-flow/), they can use feature driven development and feature branches with issue tracking to ensure every team member works efficiently. Using these GitLab Flow tips, software development teams can simplify the process and produce a more efficient and cleaner outcome.\n",{"id":5},"GitLab Flow Best Practices Explained",{"type":82,"componentName":82,"componentContent":88},{"header":89,"text":90,"config":91},"1. Use feature branches rather than direct commits on the main branch.","Using feature branches is a simple way to develop and keep the [source code](/solutions/source-code-management/) clean. If a team has recently transitioned to Git from SVN, for example, they'll be used to a trunk-based workflow. When using Git, developers should create a branch for anything they're working on so that contributors can easily start the [code review process](/topics/version-control/what-is-code-review/) before merging.\n",{"id":92},"1-use-feature-branches-rather-than-direct-commits-on-the-main-branch",{"type":82,"componentName":82,"componentContent":94},{"header":41,"text":95,"config":96},"Some developers set up their CI to only test what has been merged into the `main` branch, but this is too late in the software development lifecyle, and everyone - from developers to product managers - should feel confident that the `main` branch always has green tests. It's inefficient for developers to have to test `main` before they start developing new features.\n",{"id":97},"test-all-commits-not-only-ones-on-the-main-branch",{"type":82,"componentName":82,"componentContent":99},{"header":45,"text":100,"config":101},"When working on a `feature` branch and adding new commits, run tests right away. If the tests are taking a long time, try running them in parallel. Do this server-side in merge requests, running the complete test suite. If there is a test suite for development and another only for new versions, it's worthwhile to set up \\[parallel] tests and run them all.\n",{"id":102},"run-every-test-on-all-commits-if-tests-run-longer-than-5-minutes-they-can-run-in-parallel",{"type":82,"componentName":82,"componentContent":104},{"header":49,"text":105,"config":106},"Don't test everything at the end of a week or project. Code reviews should take place as soon as possible, because developers are more likely to identify issues that could cause problems later in the lifecycle. Since they'll find problems earlier, they'll have an easier time creating solutions.\n",{"id":107},"perform-code-reviews-before-merging-into-the-main-branch",{"type":82,"componentName":82,"componentContent":109},{"header":53,"text":110,"config":111},"If developers don't want to deploy `main` every time, they can create a `production` branch. Rather than using a script or doing it manually, teams can use automation or have a specific branch that triggers a [production deploy](https://docs.gitlab.com/ee/ci/yaml/#environment).\n",{"id":112},"deployments-are-automatic-based-on-branches-or-tags",{"type":82,"componentName":82,"componentContent":114},{"header":57,"text":115,"config":116},"Developers should use `tags` so that the CI will perform an action rather than having the CI change the repository. If teams require detailed metrics, they should have a server report detailing new versions.\n",{"id":117},"tags-are-set-by-the-user-not-by-ci",{"type":82,"componentName":82,"componentContent":119},{"header":61,"text":120,"config":121},"Each tag should create a new release. This practice ensures a clean, efficient development environment.\n",{"id":122},"releases-are-based-on-tags",{"type":82,"componentName":82,"componentContent":124},{"header":65,"text":125,"config":126},"When pushing to a public branch, developers shouldn't rebase it, because that makes it difficult to identify the improvement and test results, while [cherry picking](https://git-scm.com/docs/git-cherry-pick). Sometimes this tip can be ignored when asking someone to squash and rebase at the end of a code review process to make something easier to revert. However, in general, the guideline is: Code should be clean, and history should be realistic.\n",{"id":127},"pushed-commits-are-never-rebased",{"type":82,"componentName":82,"componentContent":129},{"header":69,"text":130,"config":131},"This tip prevents long branches. Developers check out `main`, build a feature, create a merge request, and target `main` again. They should do a complete review **before** merging and eliminating any intermediate stages.\n",{"id":132},"everyone-starts-from-main-and-targets-main",{"type":82,"componentName":82,"componentContent":134},{"header":73,"text":135,"config":136},"After identifying a bug, a problematic action someone could take is fix it in the just-released version and not fix it in `main`. To avoid it, developers should always fix forward by pushing the change in `main`, then cherry-pick it into another `patch-release` branch.\n",{"id":137},"fix-bugs-in-main-first-and-release-branches-second",{"type":82,"componentName":82,"componentContent":139},{"header":77,"text":140,"config":141},"Developers should not only say what they did, but also why they did it. An even more useful tactic is to explain why this option was selected over others to help future contributors understand the development process. Writing descriptive commit messages is useful for code reviews and future development.\n",{"id":142},"commit-messages-reflect-intent",{"type":144,"componentName":144,"componentContent":145},"TopicsCallToAction",{"subtitle":146,"primaryButton":147},"Discover how GitLab streamlines the code review process",{"text":148,"config":149},"Learn more",{"href":150},"/solutions/source-code-management/",{"type":152,"componentName":152,"componentContent":153},"CommonFaq",{"header":154,"groups":155},"Frequently Asked Questions",[156],{"questions":157},[158,161,164,167,170],{"question":159,"answer":160},"What are the most important GitLab Flow best practices for development teams?","The key practices include using feature branches rather than direct main commits, testing all commits immediately instead of only main branch, running complete test suites on every commit with parallel execution if needed, performing code reviews before merging, and automating deployments based on branches or tags. These practices ensure clean workflows and efficient development.",{"question":162,"answer":163},"How should teams handle testing in GitLab Flow workflows?","Teams should test all commits, not only ones on main branch, to ensure developers and product managers can trust that main always has green tests. Run every test on all commits, using parallel execution if tests take longer than 5 minutes. Execute complete test suites server-side in merge requests rather than waiting until the end.",{"question":165,"answer":166},"What is the proper approach to commit history and branching in GitLab Flow?","Everyone should start from main and target main to prevent long branches. Developers check out main, build features, create merge requests, and target main again. Pushed commits should never be rebased to maintain clear improvement tracking and test results. History should be realistic while keeping code clean.",{"question":168,"answer":169},"How should teams handle bug fixes and releases using GitLab Flow?","Fix bugs in main first and release branches second to avoid problems. Always fix forward by pushing changes to main, then cherry-pick into patch-release branches. Tags should be set by users rather than CI, and each tag should create a new release for clean, efficient development environments.",{"question":171,"answer":172},"Why are descriptive commit messages important in GitLab Flow?","Commit messages should reflect intent by explaining not only what was done but why it was done. Even more useful is explaining why specific options were selected over alternatives to help future contributors understand the development process. Descriptive messages benefit code reviews and future development efforts.",{"type":174,"componentName":174,"componentContent":175},"CommonResourcesContainer",{"header":176,"tabs":177},"Want to learn more about software development best practices?",[178],{"name":179,"items":180,"config":181},"resources",[],{"key":179},{"type":183,"componentName":183},"CommonNextSteps","yml",{},true,"/en-us/topics/version-control/what-are-gitlab-flow-best-practices",{"title":25,"ogTitle":25,"description":189,"ogDescription":189},"Using these best practices, software development teams can use GitLab Flow to software development.","en-us/topics/version-control/what-are-gitlab-flow-best-practices/index","cDNSiOGGq7G5GyPYXpOXGcg5LzLUBybwkdVWX28ihVg",{"data":193},{"logo":194,"freeTrial":199,"sales":204,"login":209,"items":214,"search":519,"minimal":550,"duo":569,"pricingDeployment":579},{"config":195},{"href":196,"dataGaName":197,"dataGaLocation":198},"/","gitlab logo","header",{"text":200,"config":201},"Get free trial",{"href":202,"dataGaName":203,"dataGaLocation":198},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":205,"config":206},"Talk to sales",{"href":207,"dataGaName":208,"dataGaLocation":198},"/sales/","sales",{"text":210,"config":211},"Sign in",{"href":212,"dataGaName":213,"dataGaLocation":198},"https://gitlab.com/users/sign_in/","sign in",[215,241,335,340,440,500],{"text":216,"config":217,"cards":219},"Platform",{"dataNavLevelOne":218},"platform",[220,226,234],{"title":216,"description":221,"link":222},"The intelligent orchestration platform for DevSecOps",{"text":223,"config":224},"Explore our Platform",{"href":225,"dataGaName":218,"dataGaLocation":198},"/platform/",{"title":227,"description":228,"link":229},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":230,"config":231},"Meet GitLab Duo",{"href":232,"dataGaName":233,"dataGaLocation":198},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":235,"description":236,"link":237},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":148,"config":238},{"href":239,"dataGaName":240,"dataGaLocation":198},"/why-gitlab/","why gitlab",{"text":242,"left":186,"config":243,"link":245,"lists":249,"footer":317},"Product",{"dataNavLevelOne":244},"solutions",{"text":246,"config":247},"View all Solutions",{"href":248,"dataGaName":244,"dataGaLocation":198},"/solutions/",[250,273,296],{"title":251,"description":252,"link":253,"items":258},"Automation","CI/CD and automation to accelerate deployment",{"config":254},{"icon":255,"href":256,"dataGaName":257,"dataGaLocation":198},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[259,263,266,269],{"text":260,"config":261},"CI/CD",{"href":262,"dataGaLocation":198,"dataGaName":260},"/solutions/continuous-integration/",{"text":227,"config":264},{"href":232,"dataGaLocation":198,"dataGaName":265},"gitlab duo agent platform - product menu",{"text":267,"config":268},"Source Code Management",{"href":150,"dataGaLocation":198,"dataGaName":267},{"text":270,"config":271},"Automated Software Delivery",{"href":256,"dataGaLocation":198,"dataGaName":272},"Automated software delivery",{"title":274,"description":275,"link":276,"items":281},"Security","Deliver code faster without compromising security",{"config":277},{"href":278,"dataGaName":279,"dataGaLocation":198,"icon":280},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[282,286,291],{"text":283,"config":284},"Application Security Testing",{"href":278,"dataGaName":285,"dataGaLocation":198},"Application security testing",{"text":287,"config":288},"Software Supply Chain Security",{"href":289,"dataGaLocation":198,"dataGaName":290},"/solutions/supply-chain/","Software supply chain security",{"text":292,"config":293},"Software Compliance",{"href":294,"dataGaName":295,"dataGaLocation":198},"/solutions/software-compliance/","software compliance",{"title":297,"link":298,"items":303},"Measurement",{"config":299},{"icon":300,"href":301,"dataGaName":302,"dataGaLocation":198},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[304,308,312],{"text":305,"config":306},"Visibility & Measurement",{"href":301,"dataGaLocation":198,"dataGaName":307},"Visibility and Measurement",{"text":309,"config":310},"Value Stream Management",{"href":311,"dataGaLocation":198,"dataGaName":309},"/solutions/value-stream-management/",{"text":313,"config":314},"Analytics & Insights",{"href":315,"dataGaLocation":198,"dataGaName":316},"/solutions/analytics-and-insights/","Analytics and insights",{"title":318,"items":319},"GitLab for",[320,325,330],{"text":321,"config":322},"Enterprise",{"href":323,"dataGaLocation":198,"dataGaName":324},"/enterprise/","enterprise",{"text":326,"config":327},"Small Business",{"href":328,"dataGaLocation":198,"dataGaName":329},"/small-business/","small business",{"text":331,"config":332},"Public Sector",{"href":333,"dataGaLocation":198,"dataGaName":334},"/solutions/public-sector/","public sector",{"text":336,"config":337},"Pricing",{"href":338,"dataGaName":339,"dataGaLocation":198,"dataNavLevelOne":339},"/pricing/","pricing",{"text":341,"config":342,"link":343,"lists":347,"feature":427},"Resources",{"dataNavLevelOne":179},{"text":344,"config":345},"View all resources",{"href":346,"dataGaName":179,"dataGaLocation":198},"/resources/",[348,381,399],{"title":349,"items":350},"Getting started",[351,356,361,366,371,376],{"text":352,"config":353},"Install",{"href":354,"dataGaName":355,"dataGaLocation":198},"/install/","install",{"text":357,"config":358},"Quick start guides",{"href":359,"dataGaName":360,"dataGaLocation":198},"/get-started/","quick setup checklists",{"text":362,"config":363},"Learn",{"href":364,"dataGaLocation":198,"dataGaName":365},"https://university.gitlab.com/","learn",{"text":367,"config":368},"Product documentation",{"href":369,"dataGaName":370,"dataGaLocation":198},"https://docs.gitlab.com/","product documentation",{"text":372,"config":373},"Best practice videos",{"href":374,"dataGaName":375,"dataGaLocation":198},"/getting-started-videos/","best practice videos",{"text":377,"config":378},"Integrations",{"href":379,"dataGaName":380,"dataGaLocation":198},"/integrations/","integrations",{"title":382,"items":383},"Discover",[384,389,394],{"text":385,"config":386},"Customer success stories",{"href":387,"dataGaName":388,"dataGaLocation":198},"/customers/","customer success stories",{"text":390,"config":391},"Blog",{"href":392,"dataGaName":393,"dataGaLocation":198},"/blog/","blog",{"text":395,"config":396},"Remote",{"href":397,"dataGaName":398,"dataGaLocation":198},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":400,"items":401},"Connect",[402,407,412,417,422],{"text":403,"config":404},"GitLab Services",{"href":405,"dataGaName":406,"dataGaLocation":198},"/services/","services",{"text":408,"config":409},"Community",{"href":410,"dataGaName":411,"dataGaLocation":198},"/community/","community",{"text":413,"config":414},"Forum",{"href":415,"dataGaName":416,"dataGaLocation":198},"https://forum.gitlab.com/","forum",{"text":418,"config":419},"Events",{"href":420,"dataGaName":421,"dataGaLocation":198},"/events/","events",{"text":423,"config":424},"Partners",{"href":425,"dataGaName":426,"dataGaLocation":198},"/partners/","partners",{"backgroundColor":428,"textColor":429,"text":430,"image":431,"link":435},"#2f2a6b","#fff","Insights for the future of software development",{"altText":432,"config":433},"the source promo card",{"src":434},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":436,"config":437},"Read the latest",{"href":438,"dataGaName":439,"dataGaLocation":198},"/the-source/","the source",{"text":441,"config":442,"lists":444},"Company",{"dataNavLevelOne":443},"company",[445],{"items":446},[447,452,458,460,465,470,475,480,485,490,495],{"text":448,"config":449},"About",{"href":450,"dataGaName":451,"dataGaLocation":198},"/company/","about",{"text":453,"config":454,"footerGa":457},"Jobs",{"href":455,"dataGaName":456,"dataGaLocation":198},"/jobs/","jobs",{"dataGaName":456},{"text":418,"config":459},{"href":420,"dataGaName":421,"dataGaLocation":198},{"text":461,"config":462},"Leadership",{"href":463,"dataGaName":464,"dataGaLocation":198},"/company/team/e-group/","leadership",{"text":466,"config":467},"Team",{"href":468,"dataGaName":469,"dataGaLocation":198},"/company/team/","team",{"text":471,"config":472},"Handbook",{"href":473,"dataGaName":474,"dataGaLocation":198},"https://handbook.gitlab.com/","handbook",{"text":476,"config":477},"Investor relations",{"href":478,"dataGaName":479,"dataGaLocation":198},"https://ir.gitlab.com/","investor relations",{"text":481,"config":482},"Trust Center",{"href":483,"dataGaName":484,"dataGaLocation":198},"/security/","trust center",{"text":486,"config":487},"AI Transparency Center",{"href":488,"dataGaName":489,"dataGaLocation":198},"/ai-transparency-center/","ai transparency center",{"text":491,"config":492},"Newsletter",{"href":493,"dataGaName":494,"dataGaLocation":198},"/company/contact/#contact-forms","newsletter",{"text":496,"config":497},"Press",{"href":498,"dataGaName":499,"dataGaLocation":198},"/press/","press",{"text":501,"config":502,"lists":503},"Contact us",{"dataNavLevelOne":443},[504],{"items":505},[506,509,514],{"text":205,"config":507},{"href":207,"dataGaName":508,"dataGaLocation":198},"talk to sales",{"text":510,"config":511},"Support portal",{"href":512,"dataGaName":513,"dataGaLocation":198},"https://support.gitlab.com","support portal",{"text":515,"config":516},"Customer portal",{"href":517,"dataGaName":518,"dataGaLocation":198},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":520,"login":521,"suggestions":528},"Close",{"text":522,"link":523},"To search repositories and projects, login to",{"text":524,"config":525},"gitlab.com",{"href":212,"dataGaName":526,"dataGaLocation":527},"search login","search",{"text":529,"default":530},"Suggestions",[531,533,537,539,543,547],{"text":227,"config":532},{"href":232,"dataGaName":227,"dataGaLocation":527},{"text":534,"config":535},"Code Suggestions (AI)",{"href":536,"dataGaName":534,"dataGaLocation":527},"/solutions/code-suggestions/",{"text":260,"config":538},{"href":262,"dataGaName":260,"dataGaLocation":527},{"text":540,"config":541},"GitLab on AWS",{"href":542,"dataGaName":540,"dataGaLocation":527},"/partners/technology-partners/aws/",{"text":544,"config":545},"GitLab on Google Cloud",{"href":546,"dataGaName":544,"dataGaLocation":527},"/partners/technology-partners/google-cloud-platform/",{"text":548,"config":549},"Why GitLab?",{"href":239,"dataGaName":548,"dataGaLocation":527},{"freeTrial":551,"mobileIcon":556,"desktopIcon":561,"secondaryButton":564},{"text":552,"config":553},"Start free trial",{"href":554,"dataGaName":203,"dataGaLocation":555},"https://gitlab.com/-/trials/new/","nav",{"altText":557,"config":558},"Gitlab Icon",{"src":559,"dataGaName":560,"dataGaLocation":555},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":557,"config":562},{"src":563,"dataGaName":560,"dataGaLocation":555},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":565,"config":566},"Get Started",{"href":567,"dataGaName":568,"dataGaLocation":555},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":570,"mobileIcon":575,"desktopIcon":577},{"text":571,"config":572},"Learn more about GitLab Duo",{"href":573,"dataGaName":574,"dataGaLocation":555},"/gitlab-duo/","gitlab duo",{"altText":557,"config":576},{"src":559,"dataGaName":560,"dataGaLocation":555},{"altText":557,"config":578},{"src":563,"dataGaName":560,"dataGaLocation":555},{"freeTrial":580,"mobileIcon":585,"desktopIcon":587},{"text":581,"config":582},"Back to pricing",{"href":338,"dataGaName":583,"dataGaLocation":555,"icon":584},"back to pricing","GoBack",{"altText":557,"config":586},{"src":559,"dataGaName":560,"dataGaLocation":555},{"altText":557,"config":588},{"src":563,"dataGaName":560,"dataGaLocation":555},{"title":590,"button":591,"config":596},"See how agentic AI transforms software delivery",{"text":592,"config":593},"Watch GitLab Transcend now",{"href":594,"dataGaName":595,"dataGaLocation":198},"/events/transcend/virtual/","transcend event",{"layout":597,"icon":598},"release","AiStar",{"data":600},{"text":601,"source":602,"edit":608,"contribute":613,"config":618,"items":623,"minimal":828},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":603,"config":604},"View page source",{"href":605,"dataGaName":606,"dataGaLocation":607},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":609,"config":610},"Edit this page",{"href":611,"dataGaName":612,"dataGaLocation":607},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":614,"config":615},"Please contribute",{"href":616,"dataGaName":617,"dataGaLocation":607},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":619,"facebook":620,"youtube":621,"linkedin":622},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[624,671,723,767,794],{"title":336,"links":625,"subMenu":640},[626,630,635],{"text":627,"config":628},"View plans",{"href":338,"dataGaName":629,"dataGaLocation":607},"view plans",{"text":631,"config":632},"Why Premium?",{"href":633,"dataGaName":634,"dataGaLocation":607},"/pricing/premium/","why premium",{"text":636,"config":637},"Why Ultimate?",{"href":638,"dataGaName":639,"dataGaLocation":607},"/pricing/ultimate/","why ultimate",[641],{"title":642,"links":643},"Contact Us",[644,647,649,651,656,661,666],{"text":645,"config":646},"Contact sales",{"href":207,"dataGaName":208,"dataGaLocation":607},{"text":510,"config":648},{"href":512,"dataGaName":513,"dataGaLocation":607},{"text":515,"config":650},{"href":517,"dataGaName":518,"dataGaLocation":607},{"text":652,"config":653},"Status",{"href":654,"dataGaName":655,"dataGaLocation":607},"https://status.gitlab.com/","status",{"text":657,"config":658},"Terms of use",{"href":659,"dataGaName":660,"dataGaLocation":607},"/terms/","terms of use",{"text":662,"config":663},"Privacy statement",{"href":664,"dataGaName":665,"dataGaLocation":607},"/privacy/","privacy statement",{"text":667,"config":668},"Cookie preferences",{"dataGaName":669,"dataGaLocation":607,"id":670,"isOneTrustButton":186},"cookie preferences","ot-sdk-btn",{"title":242,"links":672,"subMenu":681},[673,677],{"text":674,"config":675},"DevSecOps platform",{"href":225,"dataGaName":676,"dataGaLocation":607},"devsecops platform",{"text":678,"config":679},"AI-Assisted Development",{"href":573,"dataGaName":680,"dataGaLocation":607},"ai-assisted development",[682],{"title":13,"links":683},[684,689,694,699,703,708,713,718],{"text":685,"config":686},"CICD",{"href":687,"dataGaName":688,"dataGaLocation":607},"/topics/ci-cd/","cicd",{"text":690,"config":691},"GitOps",{"href":692,"dataGaName":693,"dataGaLocation":607},"/topics/gitops/","gitops",{"text":695,"config":696},"DevOps",{"href":697,"dataGaName":698,"dataGaLocation":607},"/topics/devops/","devops",{"text":700,"config":701},"Version Control",{"href":19,"dataGaName":702,"dataGaLocation":607},"version control",{"text":704,"config":705},"DevSecOps",{"href":706,"dataGaName":707,"dataGaLocation":607},"/topics/devsecops/","devsecops",{"text":709,"config":710},"Cloud Native",{"href":711,"dataGaName":712,"dataGaLocation":607},"/topics/cloud-native/","cloud native",{"text":714,"config":715},"AI for Coding",{"href":716,"dataGaName":717,"dataGaLocation":607},"/topics/devops/ai-for-coding/","ai for coding",{"text":719,"config":720},"Agentic AI",{"href":721,"dataGaName":722,"dataGaLocation":607},"/topics/agentic-ai/","agentic ai",{"title":724,"links":725},"Solutions",[726,728,730,735,739,742,746,749,751,754,757,762],{"text":283,"config":727},{"href":278,"dataGaName":283,"dataGaLocation":607},{"text":272,"config":729},{"href":256,"dataGaName":257,"dataGaLocation":607},{"text":731,"config":732},"Agile development",{"href":733,"dataGaName":734,"dataGaLocation":607},"/solutions/agile-delivery/","agile delivery",{"text":736,"config":737},"SCM",{"href":150,"dataGaName":738,"dataGaLocation":607},"source code management",{"text":685,"config":740},{"href":262,"dataGaName":741,"dataGaLocation":607},"continuous integration & delivery",{"text":743,"config":744},"Value stream management",{"href":311,"dataGaName":745,"dataGaLocation":607},"value stream management",{"text":690,"config":747},{"href":748,"dataGaName":693,"dataGaLocation":607},"/solutions/gitops/",{"text":321,"config":750},{"href":323,"dataGaName":324,"dataGaLocation":607},{"text":752,"config":753},"Small business",{"href":328,"dataGaName":329,"dataGaLocation":607},{"text":755,"config":756},"Public sector",{"href":333,"dataGaName":334,"dataGaLocation":607},{"text":758,"config":759},"Education",{"href":760,"dataGaName":761,"dataGaLocation":607},"/solutions/education/","education",{"text":763,"config":764},"Financial services",{"href":765,"dataGaName":766,"dataGaLocation":607},"/solutions/finance/","financial services",{"title":341,"links":768},[769,771,773,775,778,780,782,784,786,788,790,792],{"text":352,"config":770},{"href":354,"dataGaName":355,"dataGaLocation":607},{"text":357,"config":772},{"href":359,"dataGaName":360,"dataGaLocation":607},{"text":362,"config":774},{"href":364,"dataGaName":365,"dataGaLocation":607},{"text":367,"config":776},{"href":369,"dataGaName":777,"dataGaLocation":607},"docs",{"text":390,"config":779},{"href":392,"dataGaName":393,"dataGaLocation":607},{"text":385,"config":781},{"href":387,"dataGaName":388,"dataGaLocation":607},{"text":395,"config":783},{"href":397,"dataGaName":398,"dataGaLocation":607},{"text":403,"config":785},{"href":405,"dataGaName":406,"dataGaLocation":607},{"text":408,"config":787},{"href":410,"dataGaName":411,"dataGaLocation":607},{"text":413,"config":789},{"href":415,"dataGaName":416,"dataGaLocation":607},{"text":418,"config":791},{"href":420,"dataGaName":421,"dataGaLocation":607},{"text":423,"config":793},{"href":425,"dataGaName":426,"dataGaLocation":607},{"title":441,"links":795},[796,798,800,802,804,806,808,812,817,819,821,823],{"text":448,"config":797},{"href":450,"dataGaName":443,"dataGaLocation":607},{"text":453,"config":799},{"href":455,"dataGaName":456,"dataGaLocation":607},{"text":461,"config":801},{"href":463,"dataGaName":464,"dataGaLocation":607},{"text":466,"config":803},{"href":468,"dataGaName":469,"dataGaLocation":607},{"text":471,"config":805},{"href":473,"dataGaName":474,"dataGaLocation":607},{"text":476,"config":807},{"href":478,"dataGaName":479,"dataGaLocation":607},{"text":809,"config":810},"Sustainability",{"href":811,"dataGaName":809,"dataGaLocation":607},"/sustainability/",{"text":813,"config":814},"Diversity, inclusion and belonging (DIB)",{"href":815,"dataGaName":816,"dataGaLocation":607},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":481,"config":818},{"href":483,"dataGaName":484,"dataGaLocation":607},{"text":491,"config":820},{"href":493,"dataGaName":494,"dataGaLocation":607},{"text":496,"config":822},{"href":498,"dataGaName":499,"dataGaLocation":607},{"text":824,"config":825},"Modern Slavery Transparency Statement",{"href":826,"dataGaName":827,"dataGaLocation":607},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":829},[830,833,836],{"text":831,"config":832},"Terms",{"href":659,"dataGaName":660,"dataGaLocation":607},{"text":834,"config":835},"Cookies",{"dataGaName":669,"dataGaLocation":607,"id":670,"isOneTrustButton":186},{"text":837,"config":838},"Privacy",{"href":664,"dataGaName":665,"dataGaLocation":607},{"header":840,"blurb":841,"button":842,"secondaryButton":847},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":843,"config":844},"Get your free trial",{"href":845,"dataGaName":203,"dataGaLocation":846},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":645,"config":848},{"href":207,"dataGaName":208,"dataGaLocation":846},1772652096150]