[{"data":1,"prerenderedAt":1769},["ShallowReactive",2],{"/blog/git-happens":3,"navigation-en-us":984,"banner-en-us":1410,"footer-en-us":1420,"blog-post-authors-en-us-Sam Beckham":1665,"blog-related-posts-en-us-git-happens":1680,"blog-promotions-en-us":1706,"next-steps-en-us":1759},{"id":4,"title":5,"authors":6,"body":8,"category":965,"date":966,"description":967,"extension":968,"externalUrl":969,"faq":969,"featured":970,"heroImage":971,"meta":972,"navigation":973,"path":974,"seo":975,"slug":979,"stem":980,"tags":981,"template":982,"updatedDate":969,"__hash__":983},"blogPosts/en-us/blog/git-happens.md","Git happens! 6 Common Git mistakes and how to fix them",[7],"Sam Beckham",{"type":9,"value":10,"toc":952},"minimark",[11,15,20,23,33,37,40,65,68,72,80,107,110,114,121,124,148,151,155,158,161,176,179,220,223,227,235,241,277,280,284,291,298,318,321,351,355,358,364,376,379,674,684,698,701,705,708,738,741,744,748,761,764,767,776,784,788,797,803,806,809,812,818,823,826,833,838,841,844,847,853,858,861,868,874,877,887,890,893,896,901,906,914,916,922,925,931,934,948],[12,13,14],"p",{},"We all make mistakes, especially when working with something as complex as Git. But remember, Git happens!",[16,17,19],"h2",{"id":18},"what-is-git","What is Git?",[12,21,22],{},"Git is free and open-source software for distributed code management and version control. It is distributed under the GNU General Public License Version 2. Git tracks changes in any set of files and is usually used for coordinating work among programmers collaboratively developing source code during software development.",[12,24,25,26,32],{},"Git was created and released in 2005 by Linus Torvalds, who also developed Linux. The impetus for Git (which is an altering of the word “get”) was to generate an open-source version control system that performed better for the requirements of Linux kernel development. Available open-source systems at the time were not able to meet the ",[27,28,31],"a",{"href":29,"rel":30},"https://www.techtarget.com/searchitoperations/definition/Git",[],"large-scale collaborative performance effort"," required.",[16,34,36],{"id":35},"benefits-of-using-git","Benefits of using Git",[12,38,39],{},"Besides delivering superior performance, Git also provides support for a distributed workflow and safeguards against corruption. There are several other benefits, such as:",[41,42,43,47,50,53,56,59,62],"ul",{},[44,45,46],"li",{},"superior performance when it comes to version control systems",[44,48,49],{},"the ability for simultaneous development because everyone has their own local copy of code and can work on it in tandem.",[44,51,52],{},"faster releases",[44,54,55],{},"security",[44,57,58],{},"flexibility",[44,60,61],{},"built-in integration",[44,63,64],{},"strong community support",[12,66,67],{},"If you're brand-new to Git, you can learn how to start using Git on the command line. Here's how we can fix six of the most common Git mistakes.",[16,69,71],{"id":70},"_1-oops-i-spelled-that-last-commit-message-wrong","1. Oops... I spelled that last commit message wrong",[12,73,74,75,79],{},"After a good few hours of ",[27,76,78],{"href":77},"/solutions/source-code-management/","coding",", it's easy for a spelling error to sneak into your commit messages.\nLuckily, there's a simple fix.",[81,82,87],"pre",{"className":83,"code":84,"language":85,"meta":86,"style":86},"language-bash shiki shiki-themes github-light","git commit --amend\n","bash","",[88,89,90],"code",{"__ignoreMap":86},[91,92,95,99,103],"span",{"class":93,"line":94},"line",1,[91,96,98],{"class":97},"s7eDp","git",[91,100,102],{"class":101},"sYBdl"," commit",[91,104,106],{"class":105},"sYu0t"," --amend\n",[12,108,109],{},"This will open up your editor and allow you to make a change to that last commit message.\nNo one needs to know you spelled, \"addded\" with three \"d\"s.",[16,111,113],{"id":112},"_2-oops-i-forgot-to-add-a-file-to-that-last-commit","2. Oops... I forgot to add a file to that last commit",[12,115,116,117,120],{},"Another common Git pitfall is committing too early. You missed a file, forgot to save it, or\nneed to make a minor change for the last commit to make sense. ",[88,118,119],{},"--amend"," is your friend\nonce again.",[12,122,123],{},"Add that missed file then run that trusty command.",[81,125,127],{"className":83,"code":126,"language":85,"meta":86,"style":86},"git add missed-file.txt\ngit commit --amend\n",[88,128,129,139],{"__ignoreMap":86},[91,130,131,133,136],{"class":93,"line":94},[91,132,98],{"class":97},[91,134,135],{"class":101}," add",[91,137,138],{"class":101}," missed-file.txt\n",[91,140,142,144,146],{"class":93,"line":141},2,[91,143,98],{"class":97},[91,145,102],{"class":101},[91,147,106],{"class":105},[12,149,150],{},"At this point, you can either amend the commit message or just save it to keep it the same.",[16,152,154],{"id":153},"_3-oops-i-added-a-file-i-didnt-want-in-the-repo","3. Oops... I added a file I didn't want in the repo",[12,156,157],{},"But what if you do the exact opposite? What if you added a file that you didn't want to commit?\nA rogue ENV file, a build directory, a picture of your cat that you accidentally saved to the wrong folder?\nIt's all fixable.",[12,159,160],{},"If all you did was stage the file and you haven't committed it yet, it's as simple as resetting that staged file:",[81,162,164],{"className":83,"code":163,"language":85,"meta":86,"style":86},"git reset /assets/img/misty-and-pepper.jpg\n",[88,165,166],{"__ignoreMap":86},[91,167,168,170,173],{"class":93,"line":94},[91,169,98],{"class":97},[91,171,172],{"class":101}," reset",[91,174,175],{"class":101}," /assets/img/misty-and-pepper.jpg\n",[12,177,178],{},"If you've gone as far as committing that change, you need to run an extra step before:",[81,180,182],{"className":83,"code":181,"language":85,"meta":86,"style":86},"git reset --soft HEAD~1\ngit reset /assets/img/misty-and-pepper.jpg\nrm /assets/img/misty-and-pepper.jpg\ngit commit\n",[88,183,184,196,204,212],{"__ignoreMap":86},[91,185,186,188,190,193],{"class":93,"line":94},[91,187,98],{"class":97},[91,189,172],{"class":101},[91,191,192],{"class":105}," --soft",[91,194,195],{"class":101}," HEAD~1\n",[91,197,198,200,202],{"class":93,"line":141},[91,199,98],{"class":97},[91,201,172],{"class":101},[91,203,175],{"class":101},[91,205,207,210],{"class":93,"line":206},3,[91,208,209],{"class":97},"rm",[91,211,175],{"class":101},[91,213,215,217],{"class":93,"line":214},4,[91,216,98],{"class":97},[91,218,219],{"class":101}," commit\n",[12,221,222],{},"This will undo the commit, remove the image, then add a new commit in its place.",[16,224,226],{"id":225},"_4-oops-i-committed-all-those-changes-to-the-master-branch","4. Oops... I committed all those changes to the master branch",[12,228,229,230,234],{},"So you're working on a new feature and in your haste, you forgot to open a new branch for it.\nYou've already committed a load of files and now them commits are all sitting on the master branch.\nLuckily, ",[27,231,233],{"href":232},"/blog/keeping-your-code-protected/","GitLab can prevent you from pushing directly to master",".\nSo we can roll back all these changes to a new branch with the following three commands:",[12,236,237],{},[238,239,240],"em",{},"Note: Make sure you commit or stash your changes first, or all will be lost!",[81,242,244],{"className":83,"code":243,"language":85,"meta":86,"style":86},"git branch future-brunch\ngit reset HEAD~ --hard\ngit checkout future-brunch\n",[88,245,246,256,268],{"__ignoreMap":86},[91,247,248,250,253],{"class":93,"line":94},[91,249,98],{"class":97},[91,251,252],{"class":101}," branch",[91,254,255],{"class":101}," future-brunch\n",[91,257,258,260,262,265],{"class":93,"line":141},[91,259,98],{"class":97},[91,261,172],{"class":101},[91,263,264],{"class":101}," HEAD~",[91,266,267],{"class":105}," --hard\n",[91,269,270,272,275],{"class":93,"line":206},[91,271,98],{"class":97},[91,273,274],{"class":101}," checkout",[91,276,255],{"class":101},[12,278,279],{},"This creates a new branch, then rolls back the master branch to where it was before you made\nchanges, before finally checking out your new branch with all your previous changes intact.",[16,281,283],{"id":282},"_5-oops-i-made-a-spelling-mistake-in-my-branch-name","5. Oops... I made a spelling mistake in my branch name",[12,285,286,287,290],{},"The keen-eyed among you will notice a slight spelling error in my last example. It's almost\n3:00 PM and I haven't had lunch yet, so in my hunger, I've named our new branch ",[88,288,289],{},"future-brunch",".\nDelicious.",[12,292,293,294,297],{},"We rename this branch in a similar way to how we rename a file with the ",[88,295,296],{},"mv"," command: by\nmoving it to a new location with the correct name.",[81,299,301],{"className":83,"code":300,"language":85,"meta":86,"style":86},"git branch -m future-brunch feature-branch\n",[88,302,303],{"__ignoreMap":86},[91,304,305,307,309,312,315],{"class":93,"line":94},[91,306,98],{"class":97},[91,308,252],{"class":101},[91,310,311],{"class":105}," -m",[91,313,314],{"class":101}," future-brunch",[91,316,317],{"class":101}," feature-branch\n",[12,319,320],{},"If you've already pushed this branch, there are a couple of extra steps required. We need to\ndelete the old branch from the remote and push up the new one:",[81,322,324],{"className":83,"code":323,"language":85,"meta":86,"style":86},"git push origin --delete future-brunch\ngit push origin feature-branch\n",[88,325,326,341],{"__ignoreMap":86},[91,327,328,330,333,336,339],{"class":93,"line":94},[91,329,98],{"class":97},[91,331,332],{"class":101}," push",[91,334,335],{"class":101}," origin",[91,337,338],{"class":105}," --delete",[91,340,255],{"class":101},[91,342,343,345,347,349],{"class":93,"line":141},[91,344,98],{"class":97},[91,346,332],{"class":101},[91,348,335],{"class":101},[91,350,317],{"class":101},[16,352,354],{"id":353},"_6-oops-i-did-it-again","6. Oops... I did it again",[12,356,357],{},"This command is for when everything has gone wrong. When you've copy-pasted one too\nmany solutions from Stack Overflow and your repo is in a worse state than it was when you started.\nWe've all been there.",[12,359,360,363],{},[88,361,362],{},"git reflog"," shows you a list of all the things you've done.\nIt then allows you to use Git's magical time-traveling skills to go back to any point in the past.\nI should note, this is a last resort thing and should not be used lightly.\nTo get this list, type:",[81,365,367],{"className":83,"code":366,"language":85,"meta":86,"style":86},"git reflog\n",[88,368,369],{"__ignoreMap":86},[91,370,371,373],{"class":93,"line":94},[91,372,98],{"class":97},[91,374,375],{"class":101}," reflog\n",[12,377,378],{},"Every step we took, every move we made, Git was watching us.\nRunning that on our project gives us this:",[81,380,382],{"className":83,"code":381,"language":85,"meta":86,"style":86},"3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/future-brunch to refs/heads/feature-branch\n3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to future-brunch\n2b7e508 (master) HEAD@{3}: reset: moving to HEAD~\n3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo\n2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1\n37a632d HEAD@{6}: commit: Adds the client logo to the project\n2b7e508 (master) HEAD@{7}: reset: moving to HEAD\n2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the site\ndfa27a2 HEAD@{9}: reset: moving to HEAD\ndfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site\n700d0b5 HEAD@{11}: commit: Addded contributing info to the site\nefba795 HEAD@{12}: commit (initial): Initial commit\n",[88,383,384,421,452,473,503,521,554,573,588,609,625,656],{"__ignoreMap":86},[91,385,386,389,393,397,400,403,406,409,412,415,418],{"class":93,"line":94},[91,387,388],{"class":97},"3ff8691",[91,390,392],{"class":391},"sgsFI"," (HEAD -",[91,394,396],{"class":395},"sD7c4",">",[91,398,399],{"class":101}," feature-branch",[91,401,402],{"class":391},") HEAD@{",[91,404,405],{"class":97},"0}:",[91,407,408],{"class":101}," Branch:",[91,410,411],{"class":101}," renamed",[91,413,414],{"class":101}," refs/heads/future-brunch",[91,416,417],{"class":101}," to",[91,419,420],{"class":101}," refs/heads/feature-branch\n",[91,422,423,425,427,429,431,433,436,439,442,445,448,450],{"class":93,"line":141},[91,424,388],{"class":97},[91,426,392],{"class":391},[91,428,396],{"class":395},[91,430,399],{"class":101},[91,432,402],{"class":391},[91,434,435],{"class":97},"2}:",[91,437,438],{"class":101}," checkout:",[91,440,441],{"class":101}," moving",[91,443,444],{"class":101}," from",[91,446,447],{"class":101}," master",[91,449,417],{"class":101},[91,451,255],{"class":101},[91,453,454,457,460,463,466,468,470],{"class":93,"line":206},[91,455,456],{"class":97},"2b7e508",[91,458,459],{"class":391}," (master) HEAD@{",[91,461,462],{"class":97},"3}:",[91,464,465],{"class":101}," reset:",[91,467,441],{"class":101},[91,469,417],{"class":101},[91,471,472],{"class":101}," HEAD~\n",[91,474,475,477,479,481,483,485,488,491,494,497,500],{"class":93,"line":214},[91,476,388],{"class":97},[91,478,392],{"class":391},[91,480,396],{"class":395},[91,482,399],{"class":101},[91,484,402],{"class":391},[91,486,487],{"class":97},"4}:",[91,489,490],{"class":101}," commit:",[91,492,493],{"class":101}," Adds",[91,495,496],{"class":101}," the",[91,498,499],{"class":101}," client",[91,501,502],{"class":101}," logo\n",[91,504,506,508,510,513,515,517,519],{"class":93,"line":505},5,[91,507,456],{"class":97},[91,509,459],{"class":391},[91,511,512],{"class":97},"5}:",[91,514,465],{"class":101},[91,516,441],{"class":101},[91,518,417],{"class":101},[91,520,195],{"class":101},[91,522,524,527,530,533,536,538,540,542,544,547,549,551],{"class":93,"line":523},6,[91,525,526],{"class":97},"37a632d",[91,528,529],{"class":101}," HEAD@{",[91,531,532],{"class":105},"6",[91,534,535],{"class":101},"}:",[91,537,490],{"class":101},[91,539,493],{"class":101},[91,541,496],{"class":101},[91,543,499],{"class":101},[91,545,546],{"class":101}," logo",[91,548,417],{"class":101},[91,550,496],{"class":101},[91,552,553],{"class":101}," project\n",[91,555,557,559,561,564,566,568,570],{"class":93,"line":556},7,[91,558,456],{"class":97},[91,560,459],{"class":391},[91,562,563],{"class":97},"7}:",[91,565,465],{"class":101},[91,567,441],{"class":101},[91,569,417],{"class":101},[91,571,572],{"class":101}," HEAD\n",[91,574,576,578,580,583,585],{"class":93,"line":575},8,[91,577,456],{"class":97},[91,579,459],{"class":391},[91,581,582],{"class":97},"8}:",[91,584,102],{"class":101},[91,586,587],{"class":391}," (amend): Added contributing info to the site\n",[91,589,591,594,596,599,601,603,605,607],{"class":93,"line":590},9,[91,592,593],{"class":97},"dfa27a2",[91,595,529],{"class":101},[91,597,598],{"class":105},"9",[91,600,535],{"class":101},[91,602,465],{"class":101},[91,604,441],{"class":101},[91,606,417],{"class":101},[91,608,572],{"class":101},[91,610,612,614,616,619,621,623],{"class":93,"line":611},10,[91,613,593],{"class":97},[91,615,529],{"class":101},[91,617,618],{"class":105},"10",[91,620,535],{"class":101},[91,622,102],{"class":101},[91,624,587],{"class":391},[91,626,628,631,633,636,638,640,643,646,649,651,653],{"class":93,"line":627},11,[91,629,630],{"class":97},"700d0b5",[91,632,529],{"class":101},[91,634,635],{"class":105},"11",[91,637,535],{"class":101},[91,639,490],{"class":101},[91,641,642],{"class":101}," Addded",[91,644,645],{"class":101}," contributing",[91,647,648],{"class":101}," info",[91,650,417],{"class":101},[91,652,496],{"class":101},[91,654,655],{"class":101}," site\n",[91,657,659,662,664,667,669,671],{"class":93,"line":658},12,[91,660,661],{"class":97},"efba795",[91,663,529],{"class":101},[91,665,666],{"class":105},"12",[91,668,535],{"class":101},[91,670,102],{"class":101},[91,672,673],{"class":391}," (initial): Initial commit\n",[12,675,676,677,680,681,683],{},"Take note of the left-most column, as this is the index.\nIf you want to go back to any point in the history, run the below command, replacing ",[88,678,679],{},"{index}"," with that reference, e.g. ",[88,682,593],{},".",[81,685,687],{"className":83,"code":686,"language":85,"meta":86,"style":86},"git reset HEAD@{index}\n",[88,688,689],{"__ignoreMap":86},[91,690,691,693,695],{"class":93,"line":94},[91,692,98],{"class":97},[91,694,172],{"class":101},[91,696,697],{"class":101}," HEAD@{index}\n",[12,699,700],{},"So there you have six ways to get out of the most common Gitfalls.",[16,702,704],{"id":703},"more-common-git-problems","More common Git problems",[12,706,707],{},"There are a number of tips for fixing common git problems. For starters, here are a couple of common ones: to indicate the end of command options for command line utilities, try using the double dash (--). If you want to undo a change, use git reset.",[41,709,710,713,716,719,728,735],{},[44,711,712],{},"If you have a commit that is only in your local repository, you can amend it with the git commit — amend command.",[44,714,715],{},"Sometimes, you might find yourself adding files that you didn’t mean to commit. Git rm will remove it from both your staging area, as well as your file system. However, if that’s not the solution you were looking for, make sure you only remove the staged version and add the file to your .gitignore so you don’t make the same mistake again.",[44,717,718],{},"To fix a typo in a commit message or to add a file, use: git - amend.",[44,720,721,722,727],{},"If you want to remove files from staging before committing, use ",[27,723,726],{"href":724,"rel":725},"https://medium.com/@basitalkaff/common-git-problems-and-how-to-fix-them-878ef750a015",[],"“git restore”"," to reset the pointer back to the last commit ID.",[44,729,730,731],{},"If you have a change of heart and want to remove changes from a commit before pushing and reverting back, use “git reset ",[732,733,734],"specific",{"commit":86,"id":86,"we":86,"want":86,"to":86,"go":86,"back":86},".”",[44,736,737],{},"Faulty commits sometimes make their way into the central repository. When that happens, instead of creating additional revert commits, just apply the necessary changes and use the --no-commit/-n option.\nInstead of having to reinvent the wheel, use the reuse recorded resolution feature to fix repetitive merge conflicts. Add \"git config --global rerere.enabled true\" to your global config to enable it for all projects.",[12,739,740],{},"If you prefer, you can manually create the directory:",[12,742,743],{},".git/rr-cache to enable it for each project.",[16,745,747],{"id":746},"how-to-prevent-problems-with-your-git-repository","How to prevent problems with your git repository",[12,749,750,751,756,757,683],{},"It’s important to consider git repository security for web projects. Why? When you deploy a ",[27,752,755],{"href":753,"rel":754},"https://www.techtarget.com/searchsecurity/answer/How-can-developers-avoid-a-Git-repository-security-risk",[],"web page from a git repository",", you could also make the directory and its contents accessible. This gives an attacker the ability to access the metadata from URLs such as ",[27,758,759],{"href":759,"rel":760},"https://example.org/git/config",[],[12,762,763],{},"If a git repository is checked out using HTTP authentication where the username and password to access the repository are incorporated as part of the URL, that can create an especially unsafe situation. Because this information is stored in the .git/config file, an attacker has direct access to credentials for the repository.",[12,765,766],{},"To avoid these risks and improve the security of a git repository, developers should refrain from using direct git checkouts on web deployments. Instead, they should copy files to the web root directory without the .git directory metadata. Alternatively, access to the .git directory can be bypassed in the server configuration. It's also a good idea to avoid storing passwords and secret tokens right in repositories.",[12,768,769,770,775],{},"Some suggestions to ",[27,771,774],{"href":772,"rel":773},"https://stackoverflow.com/questions/58679210/how-to-stop-git-repositories-from-getting-too-big",[],"stop git repositories from getting too big",": avoid cluttering the repository with large numbers of files, don’t include binary or office files that require huge commits in the number of lines edited, and from time to time, use commands like\ngit reflog expire --all --expire=now git gc --prune=now --aggressive.",[12,777,778,779,683],{},"Here is an approach for ",[27,780,783],{"href":781,"rel":782},"https://stackoverflow.com/questions/18678853/how-can-i-fix-a-corrupted-git-repository",[],"fixing a corrupted git repository",[16,785,787],{"id":786},"some-common-git-commands","Some common git commands",[12,789,790,791,796],{},"There are hundreds of git commands programmers can use to change and track projects. Some of the ",[27,792,795],{"href":793,"rel":794},"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",[],"more common ones"," are:",[12,798,799],{},[800,801,802],"strong",{},"Create a new repository for storing code/making changes:",[12,804,805],{},"A new project requires a repository where your code is stored and changes can be made.\nCommand:",[12,807,808],{},"git init",[12,810,811],{},"Or change a current directory into a Git repo using:",[12,813,814,815],{},"git init ",[816,817],"directory",{},[12,819,820],{},[800,821,822],{},"Configure local and global values:",[12,824,825],{},"Command:",[12,827,828,829],{},"git config --global user.email ",[830,831,832],"your-email",{}," or git config -",[12,834,835],{},[800,836,837],{},"Use cloning to get source code from your remote repo",[12,839,840],{},"When working on an existing project, you can use the clone command to create a copy of your remote rep in GitLab and make changes without overwriting the master version.",[12,842,843],{},"When this command is used, you will get access to a copy of the source code on your local machine and make changes to it without compromising the master.",[12,845,846],{},"To download your project, use this:",[12,848,849,850],{},"git clone ",[851,852],"repo",{"url":86},[12,854,855],{},[800,856,857],{},"Create a local workspace:",[12,859,860],{},"When collaborating with other developers on a project, using branches lets you modify and reference copies of the same portions of source code and merge them at a later point. This avoids a situation where developers are making changes to the same code at the same time, creating errors and broken code/features.",[12,862,863,867],{},[27,864,866],{"href":793,"rel":865},[],"To create a new local branch",":",[12,869,870,871],{},"git branch ",[872,873],"branch-name",{},[12,875,876],{},"Push this local branch to the remote repo with the following:",[12,878,879,880],{},"git push -u ",[881,882,883,884],"remote",{}," ",[885,886],"branch",{"name":86},[12,888,889],{},"View existing branches on the remote repo with the following:",[12,891,892],{},"git branch or git branch—list",[12,894,895],{},"And delete a branch with:",[12,897,898,899],{},"git branch -d ",[872,900],{},[12,902,903],{},[800,904,905],{},"Switch branches, inspect files and commits:",[12,907,908,909,913],{},"With git checkout, you can move between the master branch and your copies locally, and it can be used to inspect the file and ",[27,910,912],{"href":911},"/blog/keeping-git-commit-history-clean/","commit history",". You will start out with the local clone of your master branch by default. You’ll need to run the command to switch between branches to make changes to a different local branch. One thing to note: make sure that you commit or stash any in-progress changes before switching; otherwise, you could encounter errors.",[12,915,825],{},[12,917,918,919],{},"git checkout ",[920,921],"name",{"of":86,"your":86,"branch":86},[12,923,924],{},"Or create a new branch and switch to it with one command:",[12,926,927,928],{},"git checkout -b ",[929,930],"name-of-your-branch",{},[12,932,933],{},"Have some Git tips of your own? Let us know in the comments below, we'd love to hear them.",[12,935,936,937,942,943],{},"Photo by ",[27,938,941],{"href":939,"rel":940},"https://unsplash.com/photos/WtRuYJ2EPMA?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Pawel Janiak"," on ",[27,944,947],{"href":945,"rel":946},"https://unsplash.com/search/photos/mistake?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",[949,950,951],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":86,"searchDepth":141,"depth":141,"links":953},[954,955,956,957,958,959,960,961,962,963,964],{"id":18,"depth":141,"text":19},{"id":35,"depth":141,"text":36},{"id":70,"depth":141,"text":71},{"id":112,"depth":141,"text":113},{"id":153,"depth":141,"text":154},{"id":225,"depth":141,"text":226},{"id":282,"depth":141,"text":283},{"id":353,"depth":141,"text":354},{"id":703,"depth":141,"text":704},{"id":746,"depth":141,"text":747},{"id":786,"depth":141,"text":787},"engineering","2018-08-08","Whether you added the wrong file, committed directly to master, or some other mishap, we've got you covered.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678743/Blog/Hero%20Images/fix-common-git-mistakes.jpg",{},true,"/en-us/blog/git-happens",{"title":5,"description":967,"ogTitle":5,"ogDescription":967,"noIndex":970,"ogImage":971,"ogUrl":976,"ogSiteName":977,"ogType":978,"canonicalUrls":976},"https://about.gitlab.com/blog/git-happens","https://about.gitlab.com","article","git-happens","en-us/blog/git-happens",[98],"BlogPost","ggYz0EhGm7gQDdKVd3cwTstMjaAWgJDs6piXJhxG8Vs",{"logo":985,"freeTrial":990,"sales":995,"login":1000,"items":1005,"search":1330,"minimal":1361,"duo":1380,"switchNav":1389,"pricingDeployment":1400},{"config":986},{"href":987,"dataGaName":988,"dataGaLocation":989},"/","gitlab logo","header",{"text":991,"config":992},"Get free trial",{"href":993,"dataGaName":994,"dataGaLocation":989},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":996,"config":997},"Request a demo",{"href":998,"dataGaName":999,"dataGaLocation":989},"/sales/?contact-topic=request-demo","sales",{"text":1001,"config":1002},"Sign in",{"href":1003,"dataGaName":1004,"dataGaLocation":989},"https://gitlab.com/users/sign_in/","sign in",[1006,1035,1134,1139,1252,1308],{"text":1007,"config":1008,"menu":1010},"Platform",{"dataNavLevelOne":1009},"platform",{"type":1011,"columns":1012},"cards",[1013,1019,1027],{"title":1007,"description":1014,"link":1015},"The intelligent orchestration platform for DevSecOps",{"text":1016,"config":1017},"Explore our Platform",{"href":1018,"dataGaName":1009,"dataGaLocation":989},"/platform/",{"title":1020,"description":1021,"link":1022},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":1023,"config":1024},"Meet GitLab Duo",{"href":1025,"dataGaName":1026,"dataGaLocation":989},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1028,"description":1029,"link":1030},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":1031,"config":1032},"Learn more",{"href":1033,"dataGaName":1034,"dataGaLocation":989},"/why-gitlab/","why gitlab",{"text":1036,"left":973,"config":1037,"menu":1039},"Product",{"dataNavLevelOne":1038},"solutions",{"type":1040,"link":1041,"columns":1045,"feature":1113},"lists",{"text":1042,"config":1043},"View all Solutions",{"href":1044,"dataGaName":1038,"dataGaLocation":989},"/solutions/",[1046,1069,1092],{"title":1047,"description":1048,"link":1049,"items":1054},"Automation","CI/CD and automation to accelerate deployment",{"config":1050},{"icon":1051,"href":1052,"dataGaName":1053,"dataGaLocation":989},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[1055,1059,1062,1065],{"text":1056,"config":1057},"CI/CD",{"href":1058,"dataGaLocation":989,"dataGaName":1056},"/solutions/continuous-integration/",{"text":1020,"config":1060},{"href":1025,"dataGaLocation":989,"dataGaName":1061},"gitlab duo agent platform - product menu",{"text":1063,"config":1064},"Source Code Management",{"href":77,"dataGaLocation":989,"dataGaName":1063},{"text":1066,"config":1067},"Automated Software Delivery",{"href":1052,"dataGaLocation":989,"dataGaName":1068},"Automated software delivery",{"title":1070,"description":1071,"link":1072,"items":1077},"Security","Deliver code faster without compromising security",{"config":1073},{"href":1074,"dataGaName":1075,"dataGaLocation":989,"icon":1076},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1078,1082,1087],{"text":1079,"config":1080},"Application Security Testing",{"href":1074,"dataGaName":1081,"dataGaLocation":989},"Application security testing",{"text":1083,"config":1084},"Software Supply Chain Security",{"href":1085,"dataGaLocation":989,"dataGaName":1086},"/solutions/supply-chain/","Software supply chain security",{"text":1088,"config":1089},"Software Compliance",{"href":1090,"dataGaName":1091,"dataGaLocation":989},"/solutions/software-compliance/","software compliance",{"title":1093,"link":1094,"items":1099},"Measurement",{"config":1095},{"icon":1096,"href":1097,"dataGaName":1098,"dataGaLocation":989},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[1100,1104,1108],{"text":1101,"config":1102},"Visibility & Measurement",{"href":1097,"dataGaLocation":989,"dataGaName":1103},"Visibility and Measurement",{"text":1105,"config":1106},"Value Stream Management",{"href":1107,"dataGaLocation":989,"dataGaName":1105},"/solutions/value-stream-management/",{"text":1109,"config":1110},"Analytics & Insights",{"href":1111,"dataGaLocation":989,"dataGaName":1112},"/solutions/analytics-and-insights/","Analytics and insights",{"title":1114,"type":1040,"items":1115},"GitLab for",[1116,1122,1128],{"text":1117,"config":1118},"Enterprise",{"icon":1119,"href":1120,"dataGaLocation":989,"dataGaName":1121},"Building","/enterprise/","enterprise",{"text":1123,"config":1124},"Small Business",{"icon":1125,"href":1126,"dataGaLocation":989,"dataGaName":1127},"Work","/small-business/","small business",{"text":1129,"config":1130},"Public Sector",{"icon":1131,"href":1132,"dataGaLocation":989,"dataGaName":1133},"Organization","/solutions/public-sector/","public sector",{"text":1135,"config":1136},"Pricing",{"href":1137,"dataGaName":1138,"dataGaLocation":989,"dataNavLevelOne":1138},"/pricing/","pricing",{"text":1140,"config":1141,"menu":1143},"Resources",{"dataNavLevelOne":1142},"resources",{"type":1040,"link":1144,"columns":1148,"feature":1241},{"text":1145,"config":1146},"View all resources",{"href":1147,"dataGaName":1142,"dataGaLocation":989},"/resources/",[1149,1182,1208],{"title":1150,"items":1151},"Getting started",[1152,1157,1162,1167,1172,1177],{"text":1153,"config":1154},"Install",{"href":1155,"dataGaName":1156,"dataGaLocation":989},"/install/","install",{"text":1158,"config":1159},"Quick start guides",{"href":1160,"dataGaName":1161,"dataGaLocation":989},"/get-started/","quick setup checklists",{"text":1163,"config":1164},"Learn",{"href":1165,"dataGaLocation":989,"dataGaName":1166},"https://university.gitlab.com/","learn",{"text":1168,"config":1169},"Product documentation",{"href":1170,"dataGaName":1171,"dataGaLocation":989},"https://docs.gitlab.com/","product documentation",{"text":1173,"config":1174},"Best practice videos",{"href":1175,"dataGaName":1176,"dataGaLocation":989},"/getting-started-videos/","best practice videos",{"text":1178,"config":1179},"Integrations",{"href":1180,"dataGaName":1181,"dataGaLocation":989},"/integrations/","integrations",{"title":1183,"items":1184},"Discover",[1185,1190,1195,1200,1204],{"text":1186,"config":1187},"Customer success stories",{"href":1188,"dataGaName":1189,"dataGaLocation":989},"/customers/","customer success stories",{"text":1191,"config":1192},"Blog",{"href":1193,"dataGaName":1194,"dataGaLocation":989},"/blog/","blog",{"text":1196,"config":1197},"Demo Hub",{"href":1198,"dataGaName":1199,"dataGaLocation":989},"/demo-hub/","demo hub",{"text":1201,"config":1202},"The Source",{"href":1203,"dataGaName":1194,"dataGaLocation":989},"/the-source/",{"text":1205,"config":1206},"Remote",{"href":1207,"dataGaName":881,"dataGaLocation":989},"https://handbook.gitlab.com/handbook/company/culture/all-remote/",{"title":1209,"items":1210},"Connect",[1211,1216,1221,1226,1231,1236],{"text":1212,"config":1213},"GitLab Services",{"href":1214,"dataGaName":1215,"dataGaLocation":989},"/services/","services",{"text":1217,"config":1218},"Contribute",{"href":1219,"dataGaName":1220,"dataGaLocation":989},"https://contributors.gitlab.com","contribute",{"text":1222,"config":1223},"Community",{"href":1224,"dataGaName":1225,"dataGaLocation":989},"/community/","community",{"text":1227,"config":1228},"Forum",{"href":1229,"dataGaName":1230,"dataGaLocation":989},"https://forum.gitlab.com/","forum",{"text":1232,"config":1233},"Events",{"href":1234,"dataGaName":1235,"dataGaLocation":989},"/events/","events",{"text":1237,"config":1238},"Partners",{"href":1239,"dataGaName":1240,"dataGaLocation":989},"/partners/","partners",{"config":1242,"title":1245,"text":1246,"link":1247},{"background":1243,"textColor":1244},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":1248,"config":1249},"Read the latest",{"href":1250,"dataGaName":1251,"dataGaLocation":989},"/whats-new/","whats new",{"text":1253,"config":1254,"menu":1256},"Company",{"dataNavLevelOne":1255},"company",{"type":1040,"columns":1257},[1258],{"items":1259},[1260,1265,1271,1273,1278,1283,1288,1293,1298,1303],{"text":1261,"config":1262},"About",{"href":1263,"dataGaName":1264,"dataGaLocation":989},"/company/","about",{"text":1266,"config":1267,"footerGa":1270},"Jobs",{"href":1268,"dataGaName":1269,"dataGaLocation":989},"/jobs/","jobs",{"dataGaName":1269},{"text":1232,"config":1272},{"href":1234,"dataGaName":1235,"dataGaLocation":989},{"text":1274,"config":1275},"Leadership",{"href":1276,"dataGaName":1277,"dataGaLocation":989},"/company/team/e-group/","leadership",{"text":1279,"config":1280},"Handbook",{"href":1281,"dataGaName":1282,"dataGaLocation":989},"https://handbook.gitlab.com/","handbook",{"text":1284,"config":1285},"Investor relations",{"href":1286,"dataGaName":1287,"dataGaLocation":989},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1289,"config":1290},"Trust Center",{"href":1291,"dataGaName":1292,"dataGaLocation":989},"/security/","trust center",{"text":1294,"config":1295},"AI Transparency Center",{"href":1296,"dataGaName":1297,"dataGaLocation":989},"/ai-transparency-center/","ai transparency center",{"text":1299,"config":1300},"Newsletter",{"href":1301,"dataGaName":1302,"dataGaLocation":989},"/company/contact/#contact-forms","newsletter",{"text":1304,"config":1305},"Press",{"href":1306,"dataGaName":1307,"dataGaLocation":989},"/press/","press",{"text":1309,"config":1310,"menu":1311},"Contact us",{"dataNavLevelOne":1255},{"type":1040,"columns":1312},[1313],{"items":1314},[1315,1320,1325],{"text":1316,"config":1317},"Talk to sales",{"href":1318,"dataGaName":1319,"dataGaLocation":989},"/sales/","talk to sales",{"text":1321,"config":1322},"Support portal",{"href":1323,"dataGaName":1324,"dataGaLocation":989},"https://support.gitlab.com/hc/en-us","support portal",{"text":1326,"config":1327},"Customer portal",{"href":1328,"dataGaName":1329,"dataGaLocation":989},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1331,"login":1332,"suggestions":1339},"Close",{"text":1333,"link":1334},"To search repositories and projects, login to",{"text":1335,"config":1336},"gitlab.com",{"href":1003,"dataGaName":1337,"dataGaLocation":1338},"search login","search",{"text":1340,"default":1341},"Suggestions",[1342,1344,1348,1350,1354,1358],{"text":1020,"config":1343},{"href":1025,"dataGaName":1020,"dataGaLocation":1338},{"text":1345,"config":1346},"Code Suggestions (AI)",{"href":1347,"dataGaName":1345,"dataGaLocation":1338},"/solutions/code-suggestions/",{"text":1056,"config":1349},{"href":1058,"dataGaName":1056,"dataGaLocation":1338},{"text":1351,"config":1352},"GitLab on AWS",{"href":1353,"dataGaName":1351,"dataGaLocation":1338},"/partners/technology-partners/aws/",{"text":1355,"config":1356},"GitLab on Google Cloud",{"href":1357,"dataGaName":1355,"dataGaLocation":1338},"/partners/technology-partners/google-cloud-platform/",{"text":1359,"config":1360},"Why GitLab?",{"href":1033,"dataGaName":1359,"dataGaLocation":1338},{"freeTrial":1362,"mobileIcon":1367,"desktopIcon":1372,"secondaryButton":1375},{"text":1363,"config":1364},"Start free trial",{"href":1365,"dataGaName":994,"dataGaLocation":1366},"https://gitlab.com/-/trials/new/","nav",{"altText":1368,"config":1369},"Gitlab Icon",{"src":1370,"dataGaName":1371,"dataGaLocation":1366},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1368,"config":1373},{"src":1374,"dataGaName":1371,"dataGaLocation":1366},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1376,"config":1377},"Get Started",{"href":1378,"dataGaName":1379,"dataGaLocation":1366},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1381,"mobileIcon":1385,"desktopIcon":1387},{"text":1382,"config":1383},"Learn more about GitLab Duo",{"href":1025,"dataGaName":1384,"dataGaLocation":1366},"gitlab duo",{"altText":1368,"config":1386},{"src":1370,"dataGaName":1371,"dataGaLocation":1366},{"altText":1368,"config":1388},{"src":1374,"dataGaName":1371,"dataGaLocation":1366},{"button":1390,"mobileIcon":1395,"desktopIcon":1397},{"text":1391,"config":1392},"/switch",{"href":1393,"dataGaName":1394,"dataGaLocation":1366},"#contact","switch",{"altText":1368,"config":1396},{"src":1370,"dataGaName":1371,"dataGaLocation":1366},{"altText":1368,"config":1398},{"src":1399,"dataGaName":1371,"dataGaLocation":1366},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1401,"mobileIcon":1406,"desktopIcon":1408},{"text":1402,"config":1403},"Back to pricing",{"href":1137,"dataGaName":1404,"dataGaLocation":1366,"icon":1405},"back to pricing","GoBack",{"altText":1368,"config":1407},{"src":1370,"dataGaName":1371,"dataGaLocation":1366},{"altText":1368,"config":1409},{"src":1374,"dataGaName":1371,"dataGaLocation":1366},{"title":1411,"titleMobile":1412,"button":1413,"config":1418},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":1031,"config":1414},{"href":1415,"dataGaName":1416,"dataGaLocation":1417},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1419,"disabled":970},"release",{"data":1421},{"text":1422,"source":1423,"edit":1429,"contribute":1434,"config":1439,"items":1444,"minimal":1654},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1424,"config":1425},"View page source",{"href":1426,"dataGaName":1427,"dataGaLocation":1428},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1430,"config":1431},"Edit this page",{"href":1432,"dataGaName":1433,"dataGaLocation":1428},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1435,"config":1436},"Please contribute",{"href":1437,"dataGaName":1438,"dataGaLocation":1428},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1440,"facebook":1441,"youtube":1442,"linkedin":1443},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1445,1492,1546,1590,1622],{"title":1135,"links":1446,"subMenu":1461},[1447,1451,1456],{"text":1448,"config":1449},"View plans",{"href":1137,"dataGaName":1450,"dataGaLocation":1428},"view plans",{"text":1452,"config":1453},"Why Premium?",{"href":1454,"dataGaName":1455,"dataGaLocation":1428},"/pricing/premium/","why premium",{"text":1457,"config":1458},"Why Ultimate?",{"href":1459,"dataGaName":1460,"dataGaLocation":1428},"/pricing/ultimate/","why ultimate",[1462],{"title":1463,"links":1464},"Contact Us",[1465,1468,1470,1472,1477,1482,1487],{"text":1466,"config":1467},"Contact sales",{"href":1318,"dataGaName":999,"dataGaLocation":1428},{"text":1321,"config":1469},{"href":1323,"dataGaName":1324,"dataGaLocation":1428},{"text":1326,"config":1471},{"href":1328,"dataGaName":1329,"dataGaLocation":1428},{"text":1473,"config":1474},"Status",{"href":1475,"dataGaName":1476,"dataGaLocation":1428},"https://status.gitlab.com/","status",{"text":1478,"config":1479},"Terms of use",{"href":1480,"dataGaName":1481,"dataGaLocation":1428},"/terms/","terms of use",{"text":1483,"config":1484},"Privacy statement",{"href":1485,"dataGaName":1486,"dataGaLocation":1428},"/privacy/","privacy statement",{"text":1488,"config":1489},"Cookie preferences",{"dataGaName":1490,"dataGaLocation":1428,"id":1491,"isOneTrustButton":973},"cookie preferences","ot-sdk-btn",{"title":1036,"links":1493,"subMenu":1502},[1494,1498],{"text":1495,"config":1496},"DevSecOps platform",{"href":1018,"dataGaName":1497,"dataGaLocation":1428},"devsecops platform",{"text":1499,"config":1500},"AI-Assisted Development",{"href":1025,"dataGaName":1501,"dataGaLocation":1428},"ai-assisted development",[1503],{"title":1504,"links":1505},"Topics",[1506,1511,1516,1521,1526,1531,1536,1541],{"text":1507,"config":1508},"CICD",{"href":1509,"dataGaName":1510,"dataGaLocation":1428},"/topics/ci-cd/","cicd",{"text":1512,"config":1513},"GitOps",{"href":1514,"dataGaName":1515,"dataGaLocation":1428},"/topics/gitops/","gitops",{"text":1517,"config":1518},"DevOps",{"href":1519,"dataGaName":1520,"dataGaLocation":1428},"/topics/devops/","devops",{"text":1522,"config":1523},"Version Control",{"href":1524,"dataGaName":1525,"dataGaLocation":1428},"/topics/version-control/","version control",{"text":1527,"config":1528},"DevSecOps",{"href":1529,"dataGaName":1530,"dataGaLocation":1428},"/topics/devsecops/","devsecops",{"text":1532,"config":1533},"Cloud Native",{"href":1534,"dataGaName":1535,"dataGaLocation":1428},"/topics/cloud-native/","cloud native",{"text":1537,"config":1538},"AI for Coding",{"href":1539,"dataGaName":1540,"dataGaLocation":1428},"/topics/devops/ai-for-coding/","ai for coding",{"text":1542,"config":1543},"Agentic AI",{"href":1544,"dataGaName":1545,"dataGaLocation":1428},"/topics/agentic-ai/","agentic ai",{"title":1547,"links":1548},"Solutions",[1549,1551,1553,1558,1562,1565,1569,1572,1574,1577,1580,1585],{"text":1079,"config":1550},{"href":1074,"dataGaName":1079,"dataGaLocation":1428},{"text":1068,"config":1552},{"href":1052,"dataGaName":1053,"dataGaLocation":1428},{"text":1554,"config":1555},"Agile development",{"href":1556,"dataGaName":1557,"dataGaLocation":1428},"/solutions/agile-delivery/","agile delivery",{"text":1559,"config":1560},"SCM",{"href":77,"dataGaName":1561,"dataGaLocation":1428},"source code management",{"text":1507,"config":1563},{"href":1058,"dataGaName":1564,"dataGaLocation":1428},"continuous integration & delivery",{"text":1566,"config":1567},"Value stream management",{"href":1107,"dataGaName":1568,"dataGaLocation":1428},"value stream management",{"text":1512,"config":1570},{"href":1571,"dataGaName":1515,"dataGaLocation":1428},"/solutions/gitops/",{"text":1117,"config":1573},{"href":1120,"dataGaName":1121,"dataGaLocation":1428},{"text":1575,"config":1576},"Small business",{"href":1126,"dataGaName":1127,"dataGaLocation":1428},{"text":1578,"config":1579},"Public sector",{"href":1132,"dataGaName":1133,"dataGaLocation":1428},{"text":1581,"config":1582},"Education",{"href":1583,"dataGaName":1584,"dataGaLocation":1428},"/solutions/education/","education",{"text":1586,"config":1587},"Financial services",{"href":1588,"dataGaName":1589,"dataGaLocation":1428},"/solutions/finance/","financial services",{"title":1140,"links":1591},[1592,1594,1596,1598,1601,1603,1606,1608,1610,1612,1614,1616,1618,1620],{"text":1153,"config":1593},{"href":1155,"dataGaName":1156,"dataGaLocation":1428},{"text":1158,"config":1595},{"href":1160,"dataGaName":1161,"dataGaLocation":1428},{"text":1163,"config":1597},{"href":1165,"dataGaName":1166,"dataGaLocation":1428},{"text":1168,"config":1599},{"href":1170,"dataGaName":1600,"dataGaLocation":1428},"docs",{"text":1191,"config":1602},{"href":1193,"dataGaName":1194,"dataGaLocation":1428},{"text":1604,"config":1605},"What's new",{"href":1250,"dataGaName":1251,"dataGaLocation":1428},{"text":1186,"config":1607},{"href":1188,"dataGaName":1189,"dataGaLocation":1428},{"text":1205,"config":1609},{"href":1207,"dataGaName":881,"dataGaLocation":1428},{"text":1212,"config":1611},{"href":1214,"dataGaName":1215,"dataGaLocation":1428},{"text":1217,"config":1613},{"href":1219,"dataGaName":1220,"dataGaLocation":1428},{"text":1222,"config":1615},{"href":1224,"dataGaName":1225,"dataGaLocation":1428},{"text":1227,"config":1617},{"href":1229,"dataGaName":1230,"dataGaLocation":1428},{"text":1232,"config":1619},{"href":1234,"dataGaName":1235,"dataGaLocation":1428},{"text":1237,"config":1621},{"href":1239,"dataGaName":1240,"dataGaLocation":1428},{"title":1253,"links":1623},[1624,1626,1628,1630,1632,1634,1638,1643,1645,1647,1649],{"text":1261,"config":1625},{"href":1263,"dataGaName":1255,"dataGaLocation":1428},{"text":1266,"config":1627},{"href":1268,"dataGaName":1269,"dataGaLocation":1428},{"text":1274,"config":1629},{"href":1276,"dataGaName":1277,"dataGaLocation":1428},{"text":1279,"config":1631},{"href":1281,"dataGaName":1282,"dataGaLocation":1428},{"text":1284,"config":1633},{"href":1286,"dataGaName":1287,"dataGaLocation":1428},{"text":1635,"config":1636},"Sustainability",{"href":1637,"dataGaName":1635,"dataGaLocation":1428},"/sustainability/",{"text":1639,"config":1640},"Diversity, inclusion and belonging (DIB)",{"href":1641,"dataGaName":1642,"dataGaLocation":1428},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1289,"config":1644},{"href":1291,"dataGaName":1292,"dataGaLocation":1428},{"text":1299,"config":1646},{"href":1301,"dataGaName":1302,"dataGaLocation":1428},{"text":1304,"config":1648},{"href":1306,"dataGaName":1307,"dataGaLocation":1428},{"text":1650,"config":1651},"Modern Slavery Transparency Statement",{"href":1652,"dataGaName":1653,"dataGaLocation":1428},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1655},[1656,1659,1662],{"text":1657,"config":1658},"Terms",{"href":1480,"dataGaName":1481,"dataGaLocation":1428},{"text":1660,"config":1661},"Cookies",{"dataGaName":1490,"dataGaLocation":1428,"id":1491,"isOneTrustButton":973},{"text":1663,"config":1664},"Privacy",{"href":1485,"dataGaName":1486,"dataGaLocation":1428},[1666],{"id":1667,"title":7,"body":969,"config":1668,"content":1670,"description":969,"extension":1674,"meta":1675,"navigation":973,"path":1676,"seo":1677,"stem":1678,"__hash__":1679},"blogAuthors/en-us/blog/authors/sam-beckham.yml",{"template":1669},"BlogAuthor",{"name":7,"config":1671},{"headshot":1672,"ctfId":1673},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678740/Blog/Author%20Headshots/samdbeckham-headshot.jpg","samdbeckham","yml",{},"/en-us/blog/authors/sam-beckham",{},"en-us/blog/authors/sam-beckham","Lqtc4A7WNFET0xbcui4NaPIAvsEm_cWvi0BR-a2Ri04",[1681,1690,1698],{"title":1682,"description":1683,"heroImage":1684,"category":965,"date":1685,"authors":1686,"slug":1689,"externalUrl":969},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[1687,1688],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1691,"description":1692,"heroImage":1693,"category":965,"date":1694,"authors":1695,"slug":1697,"externalUrl":969},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1696],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1699,"description":1700,"heroImage":1701,"category":965,"date":1702,"authors":1703,"slug":1705,"externalUrl":969},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[1704],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1707},[1708,1722,1734,1745],{"id":1709,"categories":1710,"header":1712,"text":1713,"button":1714,"image":1719},"ai-modernization",[1711],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1715,"config":1716},"Get your AI maturity score",{"href":1717,"dataGaName":1718,"dataGaLocation":1194},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1720},{"src":1721},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1723,"categories":1724,"header":1726,"text":1713,"button":1727,"image":1731},"devops-modernization",[1725,1530],"product","Are you just managing tools or shipping innovation?",{"text":1728,"config":1729},"Get your DevOps maturity score",{"href":1730,"dataGaName":1718,"dataGaLocation":1194},"/assessments/devops-modernization-assessment/",{"config":1732},{"src":1733},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1735,"categories":1736,"header":1737,"text":1713,"button":1738,"image":1742},"security-modernization",[55],"Are you trading speed for security?",{"text":1739,"config":1740},"Get your security maturity score",{"href":1741,"dataGaName":1718,"dataGaLocation":1194},"/assessments/security-modernization-assessment/",{"config":1743},{"src":1744},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1746,"paths":1747,"header":1750,"text":1751,"button":1752,"image":1757},"github-azure-migration",[1748,1749],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":1753,"config":1754},"See how GitLab compares to GitHub",{"href":1755,"dataGaName":1756,"dataGaLocation":1194},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1758},{"src":1733},{"header":1760,"blurb":1761,"button":1762,"secondaryButton":1767},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1763,"config":1764},"Get your free trial",{"href":1765,"dataGaName":994,"dataGaLocation":1766},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1466,"config":1768},{"href":1318,"dataGaName":999,"dataGaLocation":1766},1786803767262]