[{"data":1,"prerenderedAt":718},["ShallowReactive",2],{"/en-us/blog/git-happens/":3,"navigation-en-us":34,"banner-en-us":463,"footer-en-us":480,"Sam Beckham":690,"next-steps-en-us":703},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":24,"_id":27,"_type":28,"title":29,"_source":30,"_file":31,"_stem":32,"_extension":33},"/en-us/blog/git-happens","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"Git happens! 6 Common Git mistakes and how to fix them","Whether you added the wrong file, committed directly to master, or some other mishap, we've got you covered.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678743/Blog/Hero%20Images/fix-common-git-mistakes.jpg","https://about.gitlab.com/blog/git-happens","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git happens! 6 Common Git mistakes and how to fix them\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sam Beckham\"}],\n        \"datePublished\": \"2018-08-08\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22},[18],"Sam Beckham","2018-08-08","We all make mistakes, especially when working with something as complex as\nGit. But remember, Git happens!\n\n\n## What is Git?\n\n\nGit is free and open-source software for distributed code management and\nversion control. It is distributed under the GNU General Public License\nVersion 2. Git tracks changes in any set of files and is usually used for\ncoordinating work among programmers collaboratively developing source code\nduring software development. \n\n\nGit was created and released in 2005 by Linus Torvalds, who also developed\nLinux. The impetus for Git (which is an altering of the word “get”) was to\ngenerate an open-source version control system that performed better for the\nrequirements of Linux kernel development. Available open-source systems at\nthe time were not able to meet the [large-scale collaborative performance\neffort](https://www.techtarget.com/searchitoperations/definition/Git)\nrequired.\n\n\n## Benefits of using Git\n\n\nBesides delivering superior performance, Git also provides support for a\ndistributed workflow and safeguards against corruption. There are several\nother benefits, such as:\n\n\n- superior performance when it comes to version control systems\n\n- the ability for simultaneous development because everyone has their own\nlocal copy of code and can work on it in tandem. \n\n- faster releases\n\n- security\n\n- flexibility\n\n- built-in integration \n\n- strong community support\n\n\nIf you're brand-new to Git, you can learn [how to start using Git on the\ncommand\nline](https://docs.gitlab.com/ee/gitlab-basics/start-using-git.html). Here's\nhow we can fix six of the most common Git mistakes.\n\n\n## 1. Oops... I spelled that last commit message wrong\n\n\nAfter a good few hours of\n[coding](/solutions/source-code-management/), it's easy for a\nspelling error to sneak into your commit messages.\n\nLuckily, there's a simple fix.\n\n\n```bash\n\ngit commit --amend\n\n```\n\n\nThis will open up your editor and allow you to make a change to that last\ncommit message.\n\nNo one needs to know you spelled, \"addded\" with three \"d\"s.\n\n\n## 2. Oops... I forgot to add a file to that last commit\n\n\nAnother common Git pitfall is committing too early. You missed a file,\nforgot to save it, or\n\nneed to make a minor change for the last commit to make sense. `--amend` is\nyour friend\n\nonce again.\n\n\nAdd that missed file then run that trusty command.\n\n\n```bash\n\ngit add missed-file.txt\n\ngit commit --amend\n\n```\n\n\nAt this point, you can either amend the commit message or just save it to\nkeep it the same.\n\n\n## 3. Oops... I added a file I didn't want in the repo\n\n\nBut what if you do the exact opposite? What if you added a file that you\ndidn't want to commit?\n\nA rogue ENV file, a build directory, a picture of your cat that you\naccidentally saved to the wrong folder?\n\nIt's all fixable.\n\n\nIf all you did was stage the file and you haven't committed it yet, it's as\nsimple as resetting that staged file:\n\n\n```bash\n\ngit reset /assets/img/misty-and-pepper.jpg\n\n```\n\n\nIf you've gone as far as committing that change, you need to run an extra\nstep before:\n\n\n```bash\n\ngit reset --soft HEAD~1\n\ngit reset /assets/img/misty-and-pepper.jpg\n\nrm /assets/img/misty-and-pepper.jpg\n\ngit commit\n\n```\n\n\nThis will undo the commit, remove the image, then add a new commit in its\nplace.\n\n\n## 4. Oops... I committed all those changes to the master branch\n\n\nSo you're working on a new feature and in your haste, you forgot to open a\nnew branch for it.\n\nYou've already committed a load of files and now them commits are all\nsitting on the master branch.\n\nLuckily, [GitLab can prevent you from pushing directly to\nmaster](/blog/keeping-your-code-protected/).\n\nSo we can roll back all these changes to a new branch with the following\nthree commands:\n\n\n*Note: Make sure you commit or stash your changes first, or all will be\nlost!*\n\n\n```bash\n\ngit branch future-brunch\n\ngit reset HEAD~ --hard\n\ngit checkout future-brunch\n\n```\n\n\nThis creates a new branch, then rolls back the master branch to where it was\nbefore you made\n changes, before finally checking out your new branch with all your previous changes intact.\n\n## 5. Oops... I made a spelling mistake in my branch name\n\n\nThe keen-eyed among you will notice a slight spelling error in my last\nexample. It's almost\n\n3:00 PM and I haven't had lunch yet, so in my hunger, I've named our new\nbranch `future-brunch`.\n\nDelicious.\n\n\nWe rename this branch in a similar way to how we rename a file with the `mv`\ncommand: by\n moving it to a new location with the correct name.\n\n```bash\n\ngit branch -m future-brunch feature-branch\n\n```\n\n\nIf you've already pushed this branch, there are a couple of extra steps\nrequired. We need to\n\ndelete the old branch from the remote and push up the new one:\n\n\n```bash\n\ngit push origin --delete future-brunch\n\ngit push origin feature-branch\n\n```\n\n\n## 6. Oops... I did it again\n\n\nThis command is for when everything has gone wrong. When you've copy-pasted\none too\n\nmany solutions from Stack Overflow and your repo is in a worse state than it\nwas when you started.\n\nWe've all been there.\n\n\n`git reflog` shows you a list of all the things you've done.\n\nIt then allows you to use Git's magical time-traveling skills to go back to\nany point in the past.\n\nI should note, this is a last resort thing and should not be used lightly.\n\nTo get this list, type:\n\n\n```bash\n\ngit reflog\n\n```\n\n\nEvery step we took, every move we made, Git was watching us.\n\nRunning that on our project gives us this:\n\n\n```bash\n\n3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed\nrefs/heads/future-brunch to refs/heads/feature-branch\n\n3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to\nfuture-brunch\n\n2b7e508 (master) HEAD@{3}: reset: moving to HEAD~\n\n3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo\n\n2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1\n\n37a632d HEAD@{6}: commit: Adds the client logo to the project\n\n2b7e508 (master) HEAD@{7}: reset: moving to HEAD\n\n2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the\nsite\n\ndfa27a2 HEAD@{9}: reset: moving to HEAD\n\ndfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site\n\n700d0b5 HEAD@{11}: commit: Addded contributing info to the site\n\nefba795 HEAD@{12}: commit (initial): Initial commit\n\n```\n\n\nTake note of the left-most column, as this is the index.\n\nIf you want to go back to any point in the history, run the below command,\nreplacing `{index}` with that reference, e.g. `dfa27a2`.\n\n\n```bash\n\ngit reset HEAD@{index}\n\n```\n\n\nSo there you have six ways to get out of the most common Gitfalls.\n\n\n## More common Git problems \n\n\nThere are a number of tips for fixing common git problems. For starters,\nhere are a couple of common ones: to indicate the end of command options for\ncommand line utilities, try using the double dash (--). If you want to undo\na change, use git reset.\n\n\n- If you have a commit that is only in your local repository, you can amend\nit with the git commit — amend command.\n\n- Sometimes, you might find yourself adding files that you didn’t mean to\ncommit. Git rm will remove it from both your staging area, as well as your\nfile system. However, if that’s not the solution you were looking for, make\nsure you only remove the staged version and add the file to your .gitignore\nso you don’t make the same mistake again. \n\n- To fix a typo in a commit message or to add a file, use: git - amend.\n\n- If you want to remove files from staging before committing, use [“git\nrestore”](https://medium.com/@basitalkaff/common-git-problems-and-how-to-fix-them-878ef750a015)\nto reset the pointer back to the last commit ID.\n\n- If you have a change of heart and want to remove changes from a commit\nbefore pushing and reverting back, use “git reset \u003Cspecific commit ID we\nwant to go back>.”\n\n- Faulty commits sometimes make their way into the central repository. When\nthat happens, instead of creating additional revert commits, just apply the\nnecessary changes and use the --no-commit/-n option.\n\nInstead of having to reinvent the wheel, use the reuse recorded resolution\nfeature to fix repetitive merge conflicts. Add \"git config --global\nrerere.enabled true\" to your global config to enable it for all projects. \n\n\nIf you prefer, you can manually create the directory: \n\n\n.git/rr-cache to enable it for each project.\n\n\n## How to prevent problems with your git repository\n\n\nIt’s important to consider git repository security for web projects. Why?\nWhen you deploy a [web page from a git\nrepository](https://www.techtarget.com/searchsecurity/answer/How-can-developers-avoid-a-Git-repository-security-risk),\nyou could also make the directory and its contents accessible. This gives an\nattacker the ability to access the metadata from URLs such as\nhttps://example.org/git/config.\n\n\nIf a git repository is checked out using HTTP authentication where the\nusername and password to access the repository are incorporated as part of\nthe URL, that can create an especially unsafe situation. Because this\ninformation is stored in the .git/config file, an attacker has direct access\nto credentials for the repository.\n\n\nTo avoid these risks and improve the security of a git repository,\ndevelopers should refrain from using direct git checkouts on web\ndeployments. Instead, they should copy files to the web root directory\nwithout the .git directory metadata. Alternatively, access to the .git\ndirectory can be bypassed in the server configuration. It's also a good idea\nto avoid storing passwords and secret tokens right in repositories.\n\n\nSome suggestions to [stop git repositories from getting too\nbig](https://stackoverflow.com/questions/58679210/how-to-stop-git-repositories-from-getting-too-big):\navoid cluttering the repository with large numbers of files, don’t include\nbinary or office files that require huge commits in the number of lines\nedited, and from time to time, use commands like\n\ngit reflog expire --all --expire=now git gc --prune=now --aggressive.\n\n\nHere is an approach for [fixing a corrupted git\nrepository](https://stackoverflow.com/questions/18678853/how-can-i-fix-a-corrupted-git-repository).\n\n\n## Some common git commands\n\n\nThere are hundreds of git commands programmers can use to change and track\nprojects. Some of the [more common\nones](https://shortcut.com/blog/common-git-commands-that-you-should-memorize#:~:text=13%20common%20Git%20commands%20that%20you%20should%20consider,compare%20unstaged%20files%20before%20committing%20...%20More%20items)\nare:\n\n\n**Create a new repository for storing code/making changes:** \n\n\nA new project requires a repository where your code is stored and changes\ncan be made.\n\nCommand:\n\n\ngit init\n\n\nOr change a current directory into a Git repo using:\n\n\ngit init \u003Cdirectory>\n\n\n**Configure local and global values:**\n\n\nCommand:\n\n\ngit config --global user.email \u003Cyour-email> or git config -\n\n\n**Use cloning to get source code from your remote repo**\n\n\nWhen working on an existing project, you can use the clone command to create\na copy of your remote rep in GitLab and make changes without overwriting the\nmaster version.\n\n\nWhen this command is used, you will get access to a copy of the source code\non your local machine and make changes to it without compromising the\nmaster.\n\n\nTo download your project, use this:\n\n\ngit clone \u003Crepo URL>\n\n\n**Create a local workspace:**\n\n\nWhen collaborating with other developers on a project, using branches lets\nyou modify and reference copies of the same portions of source code and\nmerge them at a later point. This avoids a situation where developers are\nmaking changes to the same code at the same time, creating errors and broken\ncode/features.\n\n\n[To create a new local\nbranch](https://shortcut.com/blog/common-git-commands-that-you-should-memorize#:~:text=13%20common%20Git%20commands%20that%20you%20should%20consider,compare%20unstaged%20files%20before%20committing%20...%20More%20items):\n\n\ngit branch \u003Cbranch-name>\n\n\nPush this local branch to the remote repo with the following:\n\n\ngit push -u \u003Cremote> \u003Cbranch name>\n\n\nView existing branches on the remote repo with the following:\n\n\ngit branch or git branch—list\n\n\nAnd delete a branch with:\n\n\ngit branch -d \u003Cbranch-name> \n\n\n**Switch branches, inspect files and commits:**\n\n\nWith git checkout, you can move between the master branch and your copies\nlocally, and it can be used to inspect the file and [commit\nhistory](/blog/keeping-git-commit-history-clean/). You will start out with\nthe local clone of your master branch by default. You’ll need to run the\ncommand to switch between branches to make changes to a different local\nbranch. One thing to note: make sure that you commit or stash any\nin-progress changes before switching; otherwise, you could encounter errors.\n\n\nCommand:\n\n\ngit checkout \u003Cname of your branch>\n\n\nOr create a new branch and switch to it with one command:\n\n\ngit checkout -b \u003Cname-of-your-branch>\n\n\nHave some Git tips of your own? Let us know in the comments below, we'd love\nto hear them.\n\n\nPhoto by [Pawel\nJaniak](https://unsplash.com/photos/WtRuYJ2EPMA?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)\non\n[Unsplash](https://unsplash.com/search/photos/mistake?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)\n\n{: .note}\n","engineering",[23],"git",{"slug":25,"featured":6,"template":26},"git-happens","BlogPost","content:en-us:blog:git-happens.yml","yaml","Git Happens","content","en-us/blog/git-happens.yml","en-us/blog/git-happens","yml",{"_path":35,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":37,"_id":459,"_type":28,"title":460,"_source":30,"_file":461,"_stem":462,"_extension":33},"/shared/en-us/main-navigation","en-us",{"logo":38,"freeTrial":43,"sales":48,"login":53,"items":58,"search":390,"minimal":421,"duo":440,"pricingDeployment":449},{"config":39},{"href":40,"dataGaName":41,"dataGaLocation":42},"/","gitlab logo","header",{"text":44,"config":45},"Get free trial",{"href":46,"dataGaName":47,"dataGaLocation":42},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":49,"config":50},"Talk to sales",{"href":51,"dataGaName":52,"dataGaLocation":42},"/sales/","sales",{"text":54,"config":55},"Sign in",{"href":56,"dataGaName":57,"dataGaLocation":42},"https://gitlab.com/users/sign_in/","sign in",[59,103,201,206,311,371],{"text":60,"config":61,"cards":63,"footer":86},"Platform",{"dataNavLevelOne":62},"platform",[64,70,78],{"title":60,"description":65,"link":66},"The most comprehensive AI-powered DevSecOps Platform",{"text":67,"config":68},"Explore our Platform",{"href":69,"dataGaName":62,"dataGaLocation":42},"/platform/",{"title":71,"description":72,"link":73},"GitLab Duo (AI)","Build software faster with AI at every stage of development",{"text":74,"config":75},"Meet GitLab Duo",{"href":76,"dataGaName":77,"dataGaLocation":42},"/gitlab-duo/","gitlab duo ai",{"title":79,"description":80,"link":81},"Why GitLab","10 reasons why Enterprises choose GitLab",{"text":82,"config":83},"Learn more",{"href":84,"dataGaName":85,"dataGaLocation":42},"/why-gitlab/","why gitlab",{"title":87,"items":88},"Get started with",[89,94,99],{"text":90,"config":91},"Platform Engineering",{"href":92,"dataGaName":93,"dataGaLocation":42},"/solutions/platform-engineering/","platform engineering",{"text":95,"config":96},"Developer Experience",{"href":97,"dataGaName":98,"dataGaLocation":42},"/developer-experience/","Developer experience",{"text":100,"config":101},"MLOps",{"href":102,"dataGaName":100,"dataGaLocation":42},"/topics/devops/the-role-of-ai-in-devops/",{"text":104,"left":105,"config":106,"link":108,"lists":112,"footer":183},"Product",true,{"dataNavLevelOne":107},"solutions",{"text":109,"config":110},"View all Solutions",{"href":111,"dataGaName":107,"dataGaLocation":42},"/solutions/",[113,138,162],{"title":114,"description":115,"link":116,"items":121},"Automation","CI/CD and automation to accelerate deployment",{"config":117},{"icon":118,"href":119,"dataGaName":120,"dataGaLocation":42},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[122,126,130,134],{"text":123,"config":124},"CI/CD",{"href":125,"dataGaLocation":42,"dataGaName":123},"/solutions/continuous-integration/",{"text":127,"config":128},"AI-Assisted Development",{"href":76,"dataGaLocation":42,"dataGaName":129},"AI assisted development",{"text":131,"config":132},"Source Code Management",{"href":133,"dataGaLocation":42,"dataGaName":131},"/solutions/source-code-management/",{"text":135,"config":136},"Automated Software Delivery",{"href":119,"dataGaLocation":42,"dataGaName":137},"Automated software delivery",{"title":139,"description":140,"link":141,"items":146},"Security","Deliver code faster without compromising security",{"config":142},{"href":143,"dataGaName":144,"dataGaLocation":42,"icon":145},"/solutions/security-compliance/","security and compliance","ShieldCheckLight",[147,152,157],{"text":148,"config":149},"Application Security Testing",{"href":150,"dataGaName":151,"dataGaLocation":42},"/solutions/application-security-testing/","Application security testing",{"text":153,"config":154},"Software Supply Chain Security",{"href":155,"dataGaLocation":42,"dataGaName":156},"/solutions/supply-chain/","Software supply chain security",{"text":158,"config":159},"Software Compliance",{"href":160,"dataGaName":161,"dataGaLocation":42},"/solutions/software-compliance/","software compliance",{"title":163,"link":164,"items":169},"Measurement",{"config":165},{"icon":166,"href":167,"dataGaName":168,"dataGaLocation":42},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[170,174,178],{"text":171,"config":172},"Visibility & Measurement",{"href":167,"dataGaLocation":42,"dataGaName":173},"Visibility and Measurement",{"text":175,"config":176},"Value Stream Management",{"href":177,"dataGaLocation":42,"dataGaName":175},"/solutions/value-stream-management/",{"text":179,"config":180},"Analytics & Insights",{"href":181,"dataGaLocation":42,"dataGaName":182},"/solutions/analytics-and-insights/","Analytics and insights",{"title":184,"items":185},"GitLab for",[186,191,196],{"text":187,"config":188},"Enterprise",{"href":189,"dataGaLocation":42,"dataGaName":190},"/enterprise/","enterprise",{"text":192,"config":193},"Small Business",{"href":194,"dataGaLocation":42,"dataGaName":195},"/small-business/","small business",{"text":197,"config":198},"Public Sector",{"href":199,"dataGaLocation":42,"dataGaName":200},"/solutions/public-sector/","public sector",{"text":202,"config":203},"Pricing",{"href":204,"dataGaName":205,"dataGaLocation":42,"dataNavLevelOne":205},"/pricing/","pricing",{"text":207,"config":208,"link":210,"lists":214,"feature":298},"Resources",{"dataNavLevelOne":209},"resources",{"text":211,"config":212},"View all resources",{"href":213,"dataGaName":209,"dataGaLocation":42},"/resources/",[215,248,270],{"title":216,"items":217},"Getting started",[218,223,228,233,238,243],{"text":219,"config":220},"Install",{"href":221,"dataGaName":222,"dataGaLocation":42},"/install/","install",{"text":224,"config":225},"Quick start guides",{"href":226,"dataGaName":227,"dataGaLocation":42},"/get-started/","quick setup checklists",{"text":229,"config":230},"Learn",{"href":231,"dataGaLocation":42,"dataGaName":232},"https://university.gitlab.com/","learn",{"text":234,"config":235},"Product documentation",{"href":236,"dataGaName":237,"dataGaLocation":42},"https://docs.gitlab.com/","product documentation",{"text":239,"config":240},"Best practice videos",{"href":241,"dataGaName":242,"dataGaLocation":42},"/getting-started-videos/","best practice videos",{"text":244,"config":245},"Integrations",{"href":246,"dataGaName":247,"dataGaLocation":42},"/integrations/","integrations",{"title":249,"items":250},"Discover",[251,256,260,265],{"text":252,"config":253},"Customer success stories",{"href":254,"dataGaName":255,"dataGaLocation":42},"/customers/","customer success stories",{"text":257,"config":258},"Blog",{"href":259,"dataGaName":5,"dataGaLocation":42},"/blog/",{"text":261,"config":262},"Remote",{"href":263,"dataGaName":264,"dataGaLocation":42},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":266,"config":267},"TeamOps",{"href":268,"dataGaName":269,"dataGaLocation":42},"/teamops/","teamops",{"title":271,"items":272},"Connect",[273,278,283,288,293],{"text":274,"config":275},"GitLab Services",{"href":276,"dataGaName":277,"dataGaLocation":42},"/services/","services",{"text":279,"config":280},"Community",{"href":281,"dataGaName":282,"dataGaLocation":42},"/community/","community",{"text":284,"config":285},"Forum",{"href":286,"dataGaName":287,"dataGaLocation":42},"https://forum.gitlab.com/","forum",{"text":289,"config":290},"Events",{"href":291,"dataGaName":292,"dataGaLocation":42},"/events/","events",{"text":294,"config":295},"Partners",{"href":296,"dataGaName":297,"dataGaLocation":42},"/partners/","partners",{"backgroundColor":299,"textColor":300,"text":301,"image":302,"link":306},"#2f2a6b","#fff","Insights for the future of software development",{"altText":303,"config":304},"the source promo card",{"src":305},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":307,"config":308},"Read the latest",{"href":309,"dataGaName":310,"dataGaLocation":42},"/the-source/","the source",{"text":312,"config":313,"lists":315},"Company",{"dataNavLevelOne":314},"company",[316],{"items":317},[318,323,329,331,336,341,346,351,356,361,366],{"text":319,"config":320},"About",{"href":321,"dataGaName":322,"dataGaLocation":42},"/company/","about",{"text":324,"config":325,"footerGa":328},"Jobs",{"href":326,"dataGaName":327,"dataGaLocation":42},"/jobs/","jobs",{"dataGaName":327},{"text":289,"config":330},{"href":291,"dataGaName":292,"dataGaLocation":42},{"text":332,"config":333},"Leadership",{"href":334,"dataGaName":335,"dataGaLocation":42},"/company/team/e-group/","leadership",{"text":337,"config":338},"Team",{"href":339,"dataGaName":340,"dataGaLocation":42},"/company/team/","team",{"text":342,"config":343},"Handbook",{"href":344,"dataGaName":345,"dataGaLocation":42},"https://handbook.gitlab.com/","handbook",{"text":347,"config":348},"Investor relations",{"href":349,"dataGaName":350,"dataGaLocation":42},"https://ir.gitlab.com/","investor relations",{"text":352,"config":353},"Trust Center",{"href":354,"dataGaName":355,"dataGaLocation":42},"/security/","trust center",{"text":357,"config":358},"AI Transparency Center",{"href":359,"dataGaName":360,"dataGaLocation":42},"/ai-transparency-center/","ai transparency center",{"text":362,"config":363},"Newsletter",{"href":364,"dataGaName":365,"dataGaLocation":42},"/company/contact/","newsletter",{"text":367,"config":368},"Press",{"href":369,"dataGaName":370,"dataGaLocation":42},"/press/","press",{"text":372,"config":373,"lists":374},"Contact us",{"dataNavLevelOne":314},[375],{"items":376},[377,380,385],{"text":49,"config":378},{"href":51,"dataGaName":379,"dataGaLocation":42},"talk to sales",{"text":381,"config":382},"Get help",{"href":383,"dataGaName":384,"dataGaLocation":42},"/support/","get help",{"text":386,"config":387},"Customer portal",{"href":388,"dataGaName":389,"dataGaLocation":42},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":391,"login":392,"suggestions":399},"Close",{"text":393,"link":394},"To search repositories and projects, login to",{"text":395,"config":396},"gitlab.com",{"href":56,"dataGaName":397,"dataGaLocation":398},"search login","search",{"text":400,"default":401},"Suggestions",[402,404,408,410,414,418],{"text":71,"config":403},{"href":76,"dataGaName":71,"dataGaLocation":398},{"text":405,"config":406},"Code Suggestions (AI)",{"href":407,"dataGaName":405,"dataGaLocation":398},"/solutions/code-suggestions/",{"text":123,"config":409},{"href":125,"dataGaName":123,"dataGaLocation":398},{"text":411,"config":412},"GitLab on AWS",{"href":413,"dataGaName":411,"dataGaLocation":398},"/partners/technology-partners/aws/",{"text":415,"config":416},"GitLab on Google Cloud",{"href":417,"dataGaName":415,"dataGaLocation":398},"/partners/technology-partners/google-cloud-platform/",{"text":419,"config":420},"Why GitLab?",{"href":84,"dataGaName":419,"dataGaLocation":398},{"freeTrial":422,"mobileIcon":427,"desktopIcon":432,"secondaryButton":435},{"text":423,"config":424},"Start free trial",{"href":425,"dataGaName":47,"dataGaLocation":426},"https://gitlab.com/-/trials/new/","nav",{"altText":428,"config":429},"Gitlab Icon",{"src":430,"dataGaName":431,"dataGaLocation":426},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":428,"config":433},{"src":434,"dataGaName":431,"dataGaLocation":426},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":436,"config":437},"Get Started",{"href":438,"dataGaName":439,"dataGaLocation":426},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":441,"mobileIcon":445,"desktopIcon":447},{"text":442,"config":443},"Learn more about GitLab Duo",{"href":76,"dataGaName":444,"dataGaLocation":426},"gitlab duo",{"altText":428,"config":446},{"src":430,"dataGaName":431,"dataGaLocation":426},{"altText":428,"config":448},{"src":434,"dataGaName":431,"dataGaLocation":426},{"freeTrial":450,"mobileIcon":455,"desktopIcon":457},{"text":451,"config":452},"Back to pricing",{"href":204,"dataGaName":453,"dataGaLocation":426,"icon":454},"back to pricing","GoBack",{"altText":428,"config":456},{"src":430,"dataGaName":431,"dataGaLocation":426},{"altText":428,"config":458},{"src":434,"dataGaName":431,"dataGaLocation":426},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":464,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"title":465,"button":466,"image":471,"config":475,"_id":477,"_type":28,"_source":30,"_file":478,"_stem":479,"_extension":33},"/shared/en-us/banner","is now in public beta!",{"text":467,"config":468},"Try the Beta",{"href":469,"dataGaName":470,"dataGaLocation":42},"/gitlab-duo/agent-platform/","duo banner",{"altText":472,"config":473},"GitLab Duo Agent Platform",{"src":474},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":476},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":481,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":482,"_id":686,"_type":28,"title":687,"_source":30,"_file":688,"_stem":689,"_extension":33},"/shared/en-us/main-footer",{"text":483,"source":484,"edit":490,"contribute":495,"config":500,"items":505,"minimal":678},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":485,"config":486},"View page source",{"href":487,"dataGaName":488,"dataGaLocation":489},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":491,"config":492},"Edit this page",{"href":493,"dataGaName":494,"dataGaLocation":489},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":496,"config":497},"Please contribute",{"href":498,"dataGaName":499,"dataGaLocation":489},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":501,"facebook":502,"youtube":503,"linkedin":504},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[506,529,585,614,648],{"title":60,"links":507,"subMenu":512},[508],{"text":509,"config":510},"DevSecOps platform",{"href":69,"dataGaName":511,"dataGaLocation":489},"devsecops platform",[513],{"title":202,"links":514},[515,519,524],{"text":516,"config":517},"View plans",{"href":204,"dataGaName":518,"dataGaLocation":489},"view plans",{"text":520,"config":521},"Why Premium?",{"href":522,"dataGaName":523,"dataGaLocation":489},"/pricing/premium/","why premium",{"text":525,"config":526},"Why Ultimate?",{"href":527,"dataGaName":528,"dataGaLocation":489},"/pricing/ultimate/","why ultimate",{"title":530,"links":531},"Solutions",[532,537,539,541,546,551,555,558,562,567,569,572,575,580],{"text":533,"config":534},"Digital transformation",{"href":535,"dataGaName":536,"dataGaLocation":489},"/topics/digital-transformation/","digital transformation",{"text":148,"config":538},{"href":150,"dataGaName":148,"dataGaLocation":489},{"text":137,"config":540},{"href":119,"dataGaName":120,"dataGaLocation":489},{"text":542,"config":543},"Agile development",{"href":544,"dataGaName":545,"dataGaLocation":489},"/solutions/agile-delivery/","agile delivery",{"text":547,"config":548},"Cloud transformation",{"href":549,"dataGaName":550,"dataGaLocation":489},"/topics/cloud-native/","cloud transformation",{"text":552,"config":553},"SCM",{"href":133,"dataGaName":554,"dataGaLocation":489},"source code management",{"text":123,"config":556},{"href":125,"dataGaName":557,"dataGaLocation":489},"continuous integration & delivery",{"text":559,"config":560},"Value stream management",{"href":177,"dataGaName":561,"dataGaLocation":489},"value stream management",{"text":563,"config":564},"GitOps",{"href":565,"dataGaName":566,"dataGaLocation":489},"/solutions/gitops/","gitops",{"text":187,"config":568},{"href":189,"dataGaName":190,"dataGaLocation":489},{"text":570,"config":571},"Small business",{"href":194,"dataGaName":195,"dataGaLocation":489},{"text":573,"config":574},"Public sector",{"href":199,"dataGaName":200,"dataGaLocation":489},{"text":576,"config":577},"Education",{"href":578,"dataGaName":579,"dataGaLocation":489},"/solutions/education/","education",{"text":581,"config":582},"Financial services",{"href":583,"dataGaName":584,"dataGaLocation":489},"/solutions/finance/","financial services",{"title":207,"links":586},[587,589,591,593,596,598,600,602,604,606,608,610,612],{"text":219,"config":588},{"href":221,"dataGaName":222,"dataGaLocation":489},{"text":224,"config":590},{"href":226,"dataGaName":227,"dataGaLocation":489},{"text":229,"config":592},{"href":231,"dataGaName":232,"dataGaLocation":489},{"text":234,"config":594},{"href":236,"dataGaName":595,"dataGaLocation":489},"docs",{"text":257,"config":597},{"href":259,"dataGaName":5,"dataGaLocation":489},{"text":252,"config":599},{"href":254,"dataGaName":255,"dataGaLocation":489},{"text":261,"config":601},{"href":263,"dataGaName":264,"dataGaLocation":489},{"text":274,"config":603},{"href":276,"dataGaName":277,"dataGaLocation":489},{"text":266,"config":605},{"href":268,"dataGaName":269,"dataGaLocation":489},{"text":279,"config":607},{"href":281,"dataGaName":282,"dataGaLocation":489},{"text":284,"config":609},{"href":286,"dataGaName":287,"dataGaLocation":489},{"text":289,"config":611},{"href":291,"dataGaName":292,"dataGaLocation":489},{"text":294,"config":613},{"href":296,"dataGaName":297,"dataGaLocation":489},{"title":312,"links":615},[616,618,620,622,624,626,628,632,637,639,641,643],{"text":319,"config":617},{"href":321,"dataGaName":314,"dataGaLocation":489},{"text":324,"config":619},{"href":326,"dataGaName":327,"dataGaLocation":489},{"text":332,"config":621},{"href":334,"dataGaName":335,"dataGaLocation":489},{"text":337,"config":623},{"href":339,"dataGaName":340,"dataGaLocation":489},{"text":342,"config":625},{"href":344,"dataGaName":345,"dataGaLocation":489},{"text":347,"config":627},{"href":349,"dataGaName":350,"dataGaLocation":489},{"text":629,"config":630},"Sustainability",{"href":631,"dataGaName":629,"dataGaLocation":489},"/sustainability/",{"text":633,"config":634},"Diversity, inclusion and belonging (DIB)",{"href":635,"dataGaName":636,"dataGaLocation":489},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":352,"config":638},{"href":354,"dataGaName":355,"dataGaLocation":489},{"text":362,"config":640},{"href":364,"dataGaName":365,"dataGaLocation":489},{"text":367,"config":642},{"href":369,"dataGaName":370,"dataGaLocation":489},{"text":644,"config":645},"Modern Slavery Transparency Statement",{"href":646,"dataGaName":647,"dataGaLocation":489},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":649,"links":650},"Contact Us",[651,654,656,658,663,668,673],{"text":652,"config":653},"Contact an expert",{"href":51,"dataGaName":52,"dataGaLocation":489},{"text":381,"config":655},{"href":383,"dataGaName":384,"dataGaLocation":489},{"text":386,"config":657},{"href":388,"dataGaName":389,"dataGaLocation":489},{"text":659,"config":660},"Status",{"href":661,"dataGaName":662,"dataGaLocation":489},"https://status.gitlab.com/","status",{"text":664,"config":665},"Terms of use",{"href":666,"dataGaName":667,"dataGaLocation":489},"/terms/","terms of use",{"text":669,"config":670},"Privacy statement",{"href":671,"dataGaName":672,"dataGaLocation":489},"/privacy/","privacy statement",{"text":674,"config":675},"Cookie preferences",{"dataGaName":676,"dataGaLocation":489,"id":677,"isOneTrustButton":105},"cookie preferences","ot-sdk-btn",{"items":679},[680,682,684],{"text":664,"config":681},{"href":666,"dataGaName":667,"dataGaLocation":489},{"text":669,"config":683},{"href":671,"dataGaName":672,"dataGaLocation":489},{"text":674,"config":685},{"dataGaName":676,"dataGaLocation":489,"id":677,"isOneTrustButton":105},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",[691],{"_path":692,"_dir":693,"_draft":6,"_partial":6,"_locale":7,"content":694,"config":698,"_id":700,"_type":28,"title":18,"_source":30,"_file":701,"_stem":702,"_extension":33},"/en-us/blog/authors/sam-beckham","authors",{"name":18,"config":695},{"headshot":696,"ctfId":697},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678740/Blog/Author%20Headshots/samdbeckham-headshot.jpg","samdbeckham",{"template":699},"BlogAuthor","content:en-us:blog:authors:sam-beckham.yml","en-us/blog/authors/sam-beckham.yml","en-us/blog/authors/sam-beckham",{"_path":704,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"header":705,"eyebrow":706,"blurb":707,"button":708,"secondaryButton":712,"_id":714,"_type":28,"title":715,"_source":30,"_file":716,"_stem":717,"_extension":33},"/shared/en-us/next-steps","Start shipping better software faster","50%+ of the Fortune 100 trust GitLab","See what your team can do with the intelligent\n\n\nDevSecOps platform.\n",{"text":44,"config":709},{"href":710,"dataGaName":47,"dataGaLocation":711},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":49,"config":713},{"href":51,"dataGaName":52,"dataGaLocation":711},"content:shared:en-us:next-steps.yml","Next Steps","shared/en-us/next-steps.yml","shared/en-us/next-steps",1758326218966]