[{"data":1,"prerenderedAt":708},["ShallowReactive",2],{"/de-de/blog/keep-git-history-clean-with-interactive-rebase/":3,"navigation-de-de":36,"banner-de-de":456,"footer-de-de":469,"Tobias Günther":679,"next-steps-de-de":693},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":26,"_id":29,"_type":30,"title":31,"_source":32,"_file":33,"_stem":34,"_extension":35},"/de-de/blog/keep-git-history-clean-with-interactive-rebase","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-Historie mit Interactive Rebase bereinigen","Erfahre, was Git Rebase ist und wie du damit in ein paar Schritten eine Git-Historie bereinigen kannst.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662593/Blog/Hero%20Images/title-image.png","https://about.gitlab.com/blog/keep-git-history-clean-with-interactive-rebase","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git-Historie mit Interactive Rebase bereinigen\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tobias Günther\"}],\n        \"datePublished\": \"2020-11-23\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22,"updatedDate":25},[18],"Tobias Günther","2020-11-23","# Git-Historie mit dem Interactive Rebase bereinigen\n\n\nDas interaktive Rebase ist eines der vielseitigsten Tools von Git. Hier\nerfährst du, wie du damit Commit-Meldungen korrigierst, Fehler behebst und\ndeine Git-Historie ordentlich hältst. \n\n\n## Was ist das Interactive Rebase?\n\n\nDas Interactive [Rebase](/solutions/source-code-management/),\nauch bekannt als Git Interactive Rebase, wird oft als das „Schweizer\nTaschenmesser\" von Git bezeichnet, da es vielfältige Tools für\nunterschiedliche Einsatzmöglichkeiten bietet. Ein zentraler und wichtiger\nAnwendungsbereich ist das Bereinigen der eigenen lokalen Commit-Historie. \n\n\nBeachte hierbei das Wort „lokal”: Es sollte ausschließlich verwendet werden,\num die persönliche Commit-Historie aufzuräumen, z.B. wenn du einen\nFeature-Branch in einen Team-Branch integrierst. Es ist hingegen nicht\ngeeignet für Commits, die bereits an ein entferntes Repository gepusht und\nsomit geteilt wurden, da interaktives Rebase die Git-Historie „umschreibt”.\nIm Folgenden findest du einige Beispiel-Szenarien.\n\n\nAnmerkung: Zur besseren Visualisierung der Szenarios und Workflows in diesem\nBeitrag habe ich das [\"Tower\" Git Desktop\nGUI](https://www.git-tower.com/?utm_source=gitlab&utm_medium=guestpost&utm_campaign=interactive-rebase)\nin einigen der Screenshots verwendet.\n\n{: .note}\n\n\n## Korrektur einer alten Commit-Nachricht mit Git Rebase Interactive\n\n\nEs ist möglich, dass du nach getaner Arbeit einen Tippfehler in einer\n**älteren Commit-Nachricht** entdeckst oder merkst, dass eine wichtige\nInformation in der Beschreibung fehlt. Wäre es der allerletzte Commit,\nkönnte man einfach die Option '--amend' des 'git commit' Befehls nutzen, um\ndie Nachricht zu korrigieren. Bei älteren Commits jedoch ist ein\ninteraktives Rebase notwendig, um Änderungen vorzunehmen.\n\n\nHier ein Beispiel für eine fehlerhafte Commit-Nachricht, die du korrigieren\nmöchtest:\n\n\n![A bad commit message that needs\ncorrection](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/bad-commit-message@2x.png){:\n.shadow.medium.center}\n\nEine fehlerhafte Commit-Meldung, die korrigiert werden muss\n\n{: .note.text-center}\n\n\nBei jeder interaktiven Rebase-Sitzung mit Git musst du zunächst bestimmen,\n**welchen Teil der Commit-Historie du bearbeiten willst.** Um den\nfehlerhaften Commit aus dem vorherigen Beispiel zu ändern, sollte die\nSitzung beim übergeordneten Commit beginnen.\n\n\n![Starting our interactive rebase\nsession](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/start-at-parent-commit@2x.png){:\n.shadow.medium.center}\n\nStart der interaktiven Rebase-Sitzung\n\n{: .note.text-center}\n\n\nDu kannst nun den Hash dieses Start-Commits an den interaktiven Befehl Git\nRebase weitergeben:\n\n\n```\n\n$ git rebase -i 0023cddd\n\n```\n\n\nNun öffnet sich ein Editor-Fenster, in dem eine Liste der ausgewählten\nCommits zur Bearbeitung angezeigt wird. Dabei kann es überraschend sein,\ndass die Commits in *umgekehrter Reihenfolge* aufgelistet sind. Dies liegt\ndaran, dass Git in einer interaktiven Rebase-Sitzung die alten Commits\nschrittweise erneut anwendet. Aus der Perspektive von Git ist diese\numgekehrte Reihenfolge daher korrekt.\n\n\n![Editor window with the selected\ncommits](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/editor-window-start-ir@2x.png){:\n.shadow.medium.center}\n\nEditor-Fenster mit den ausgewählten Commits\n\n{: .note.text-center}\n\n\nEin wichtiger Hinweis zum Editor-Fenster: *Du kannst die Commit-Nachricht\nnicht direkt in diesem Fenster ändern!* Stattdessen verwendest du ein Action\nKeyword (Aktionsschlüsselwort), um den Commit auszuwählen, den du bearbeiten\nmöchtest. Möchtest du die Nachricht eines Commits ändern, markierst du die\nentsprechende Zeile mit „reword”. Nachdem du das Editor-Fenster gespeichert\nund geschlossen hast, öffnet sich ein neues Fenster, in dem die alte\nCommit-Nachricht angezeigt wird. Hier kannst du nun die gewünschten\nÄnderungen vornehmen.\n\n\n![Finally, we can make our\nchanges](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/correct-commit-message.gif){:\n.shadow.medium.center}\n\nDurchführung der Commit-Änderungen\n\n{: .note.text-center}\n\n\nNach erneutem Speichern und Schließen ist die interaktive Rebase-Sitzung\nabgeschlossen und die alte Commit-Nachricht wurde korrigiert!\n\n\n## Kombinieren mehrerer Commits mit interaktivem Rebase\n\nEin weiterer Anwendungsfall für das interaktive Rebase ist **das\nZusammenfassen mehrerer alter Commits zu einem einzigen** – mithilfe von Git\nRebase Interactive Merge Commits. Obwohl die goldene Regel der\nVersionskontrolle empfiehlt, eher mehrere kleinere Commits als wenige große\nzu erstellen, gibt es Situationen, in denen das Zusammenführen sinnvoll ist.\nBeispielsweise kann es vorkommen, dass du rückblickend feststellst, dass ein\nCommit effektiver ist als mehrere.\n\n\n![Let's combine multiple commits into\none](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-selected-commits@2x.png){:\n.shadow.medium.center}\n\nKombinieren von mehrerer Commits zu einem\n\n{: .note.text-center}\n\n\nWie im ersten Fall beginnt die interaktive Rebase-Sitzung spätestens beim\nübergeordneten Commit, das manipuliert werden soll.\n\n```\n\n$ git rebase -i 2b504bee\n\n```\n\n\nEs öffnet sich wieder ein Editor-Fenster, in dem der Teil der\nCommit-Historie aufgelistet ist, der bearbeitet werden soll:\n\n\n![Marking lines with\n\"squash\"](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-mark-commit@2x.png){:\n.shadow.medium.center}\n\nLinien in der Commit-Historie mit „Squash“ markieren\n\n{: .note.text-center}\n\n\nDas hier verwendete Action Keyword heißt „squash“. Um es zu verwenden, musst\ndu noch etwas über „squash“ wissen: *Die Zeile, die wir mit dem\nSchlüsselwort „squash“ markieren, wird mit der Zeile direkt darüber\nkombiniert.* Deshalb wurde, wie im Screenshot zu sehen, die Zeile Nr. 2 mit\n„squash“ markiert, um sie mit der Zeile Nr. 1 zu kombinieren.\n\n\nJetzt kannst du das Editor-Fenster speichern und schließen. Danach erscheint\nein neues Fenster, in dem du aufgefordert wirst, eine Commit-Nachricht für\nden neuen Commit einzugeben, der durch die Kombination der beiden alten\nCommits erzeugt wird. So entstehen neue Git Interactive Rebase Merge\nCommits.\n\n\n![Entering a new message for the new, squashed\ncommit](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/squash-enter-new-message@2x.png){:\n.shadow.medium.center}\n\nEingabe einer neuen Nachricht für den „squash“-Commit\n\n{: .note.text-center}\n\n\nNach dem Speichern und Schließen dieses Editor-Fensters siehst du, dass ein\nneuer Commit erstellt wurde, der die Change-Sets (Änderungssätze) der beiden\nalten Commits enthält.\n\n\n## Behebung eines Fehlers mit Interactive Rebase\n\nEin weiteres Einsatzgebiet für das interaktive Rebase ist die Korrektur\neines Fehlers in einer früheren Übertragung. Es spielt keine Rolle, welche\nArt von Fehler gemacht wurde: Vielleicht wurde eine wichtige Änderung\nvergessen, eine Datei hätte gelöscht werden sollen oder es wurde einfach ein\nTippfehler gemacht.\n\n\nIn solchen Fällen könnte die erste Reaktion sein, einfach einen neuen Commit\nzu erstellen, der den Fehler behebt. Dies kann jedoch die Commit-Historie\nunübersichtlich machen. Ständig einen ursprünglichen Commit zu erstellen und\ndann einen weiteren, nur um kleine Fehler zu korrigieren, kann zu einer\nchaotischen und schwer nachvollziehbaren Commit-Historie führen.\n\n\nAn dieser Stelle kommt „fixup\", eines der Tools, die mit interaktivem Rebase\ngeliefert werden, zum Einsatz. Git Rebase Interactive Fixup nimmt diesen\n„Quick-Fix\"-Commit, wendet seine Änderungen auf den ursprünglichen Commit\nan, korrigiert ihn und entfernt dann den korrigierenden Commit\n(Band-Aid-Commit):\n\n\n![How \"fixup\"\nworks](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/diagram-fixup.png){:\n.medium.center}\n\nSo funktioniert \"fixup\"\n\n{: .note.text-center}\n\n\nNach der Korrektur scheint es, als ob es nie ein Problem mit dem\nursprünglichen Commit gegeben hätte. Hier ist ein weiteres praktisches\nBeispiel für diesen Prozess.\n\n\nZunächst solltest du alles tun, was nötig ist, um das Problem zu beheben:\nDas kann das Hinzufügen einer neuen Datei, das Ändern bestehender Dateien\noder das Löschen veralteter Dateien sein. Der nächste Schritt ist, diese\nÄnderungen an das Repository zu senden.\n\n\nHierbei nutzt du beim Commit die Option '--fixup' und gibst den Commit-Hash\ndes fehlerhaften Commits an, um Git deutlich zu machen, welcher\nursprüngliche Commit korrigiert werden soll.\n\n\n```\n\n$ git add corrections.txt\n\n$ git commit --fixup 2b504bee\n\n```\n\n\nWenn du dir nun die Commit-Historie anschaust, wirst du feststellen, dass\nein recht gewöhnlich aussehender Commit erstellt wurde, der zunächst einmal\nwenig spektakulär scheint. Bei genauerer Betrachtung aber wirst du bemerken,\ndass doch etwas Unerwartetes passiert ist: Dem neuen Commit wurde\nautomatisch „fixup!“ gefolgt vom Betreff des fehlerhaften Commits\nvorangestellt – pure Magie!\n\n\n![The original commit and the fix\ncommit](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_create-fix-commit@2x.png){:\n.shadow.medium.center}\n\nDie ursprüngliche Übertragung und die Korrekturübertragung\n\n{: .note.text-center}\n\n\nDer dritte – wieder etwas gewöhnlichere – Schritt besteht nun darin, die\ninteraktive Rebase-Sitzung zu starten. Auch hier wählst du den Parent der\nfehlerhaften Übertragung als Startpunkt:\n\n```\n\n$ git rebase -i 0023cddd --autosquash\n\n```\n\n\nAls Nächstes verwendest du die Option '--autosquash'. Diese Option sorgt\ndafür, dass du in dem nun geöffneten Editor-Fenster selbst nichts ausführen\nmusst.Wir schauen uns das mal genau an:\n\n\n![Our fix commit is marked \"fixup\" and sorted to the right\nposition](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_editor@2x.png){:\n.shadow.medium.center}\n\nDer Fix-Commit wird als „fixup\" markiert und an die richtige Position\nsortiert\n\n{: .note.text-center}\n\n\nGit hat automatisch zwei Dinge gemacht:\n\n\n1. Es hat den zu korrigierenden Commit als „fixup\" markiert.\n\n2. Es hat die Zeilen neu sortiert, sodass der zu korrigierende Commit direkt\nunter dem fehlerhaften Commit erscheint. Das liegt daran, dass „fixup“ genau\nwie „squash“ funktioniert, indem es mit der darüber liegenden Zeile\nkombiniert wird.\n\n\nNun speicherst du das Editor-Fenster und schließt es dann.\n\n\nDer Commit-Verlauf sieht nun so aus:\n\n\n![A happy\nending!](https://about.gitlab.com/images/blogimages/how-to-keep-your-git-history-clean-with-interactive-rebase/fixup_final-corrected@2x.png){:\n.shadow.medium.center}\n\nEin Happy End!\n\n{: .note.text-center}\n\n\nNun sind nicht nur die Korrekturen aus dem „Band-Aid-Commit“ in den\nursprünglich fehlerhaften Commit integriert worden, sondern der fehlerhafte\nCommit ist auch aus der Commit-Historie verschwunden. Alles ist nun so\nbereinigt, dass es scheint, als hätte es nie ein Problem gegeben.\n\n\n## Entdecke die Leistungsfähigkeit von Git Rebase Interactive\n\n\nWie du gesehen hast, gibt es für interaktives Rebase viele\nEinsatzmöglichkeiten, vor allem im Bereich der Fehlerbehebung. Für einen\nÜberblick über weitere nützliche Anwendungen ist das **kostenlose** [\"First\nAid Kit for\nGit\"](https://www.git-tower.com/learn/git/first-aid-kit?utm_source=gitlab&utm_medium=guestpost&utm_campaign=interactive-rebase)\nempfehlenswert. Diese Sammlung besteht aus kurzen Videos (2-3 Minuten pro\nEpisode), die dir zeigen, wie du Fehler mit interaktivem Rebase und anderen\nGit-Tools rückgängig machen kannst.\n\n\n## Weitere Git-Tipps und -Tricks\n\n\n- [15 Git tips to improve your\nworkflow](/blog/15-git-tips-improve-workflow/)\n(englischsprachiger Artikel)\n\n- [How Git Partial Clone lets you fetch only the large file you\nneed](/blog/partial-clone-for-massive-repositories/)\n(englischsprachiger Artikel)\n\n- [Git happens! 6 Common Git mistakes and how to fix\nthem](/blog/git-happens/) (englischsprachiger Artikel)\n\n\n### Über den Gastautor\n\n\n_[Tobias Günther](https://twitter.com/gntr) ist der CEO von\n[Tower](https://www.git-tower.com/?utm_source=gitlab&utm_medium=guestpost&utm_campaign=interactive-rebase),\nder beliebten Git-Desktopanwendung, welche bereits über 100.000\nEntwicklerinnen und Entwickler dabei geholfen hat, noch produktiver zu\nwerden._\n\n\nCoverbild von [David Taljat](https://www.pexels.com/@david-taljat-3748658)\nbei\n[Pexels](https://www.pexels.com/photo/yellow-and-blue-line-on-gray-asphalt-road-5690623/)\n\n{: .note}\n","engineering",[23,24],"git","tutorial","2024-12-18",{"slug":27,"featured":6,"template":28},"keep-git-history-clean-with-interactive-rebase","BlogPost","content:de-de:blog:keep-git-history-clean-with-interactive-rebase.yml","yaml","Keep Git History Clean With Interactive Rebase","content","de-de/blog/keep-git-history-clean-with-interactive-rebase.yml","de-de/blog/keep-git-history-clean-with-interactive-rebase","yml",{"_path":37,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":39,"_id":452,"_type":30,"title":453,"_source":32,"_file":454,"_stem":455,"_extension":35},"/shared/de-de/main-navigation","de-de",{"logo":40,"freeTrial":45,"sales":50,"login":55,"items":60,"search":393,"minimal":429,"duo":443},{"config":41},{"href":42,"dataGaName":43,"dataGaLocation":44},"/de-de/","gitlab logo","header",{"text":46,"config":47},"Kostenlose Testversion anfordern",{"href":48,"dataGaName":49,"dataGaLocation":44},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":51,"config":52},"Vertrieb kontaktieren",{"href":53,"dataGaName":54,"dataGaLocation":44},"/de-de/sales/","sales",{"text":56,"config":57},"Anmelden",{"href":58,"dataGaName":59,"dataGaLocation":44},"https://gitlab.com/users/sign_in/","sign in",[61,105,204,209,314,374],{"text":62,"config":63,"cards":65,"footer":88},"Plattform",{"dataNavLevelOne":64},"platform",[66,72,80],{"title":62,"description":67,"link":68},"Die umfassendste KI-basierte DevSecOps-Plattform",{"text":69,"config":70},"Erkunde unsere Plattform",{"href":71,"dataGaName":64,"dataGaLocation":44},"/de-de/platform/",{"title":73,"description":74,"link":75},"GitLab Duo (KI)","Entwickle Software schneller mit KI in jeder Phase der Entwicklung",{"text":76,"config":77},"Lerne GitLab Duo kennen",{"href":78,"dataGaName":79,"dataGaLocation":44},"/de-de/gitlab-duo/","gitlab duo ai",{"title":81,"description":82,"link":83},"Gründe, die für GitLab sprechen","10 Gründe, warum Unternehmen sich für GitLab entscheiden",{"text":84,"config":85},"Mehr erfahren",{"href":86,"dataGaName":87,"dataGaLocation":44},"/de-de/why-gitlab/","why gitlab",{"title":89,"items":90},"Erste Schritte mit",[91,96,101],{"text":92,"config":93},"Platform Engineering",{"href":94,"dataGaName":95,"dataGaLocation":44},"/de-de/solutions/platform-engineering/","platform engineering",{"text":97,"config":98},"Entwicklererfahrung",{"href":99,"dataGaName":100,"dataGaLocation":44},"/de-de/developer-experience/","Developer experience",{"text":102,"config":103},"MLOps",{"href":104,"dataGaName":102,"dataGaLocation":44},"/de-de/topics/devops/the-role-of-ai-in-devops/",{"text":106,"left":107,"config":108,"link":110,"lists":114,"footer":186},"Produkt",true,{"dataNavLevelOne":109},"solutions",{"text":111,"config":112},"Alle Lösungen anzeigen",{"href":113,"dataGaName":109,"dataGaLocation":44},"/de-de/solutions/",[115,141,164],{"title":116,"description":117,"link":118,"items":123},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":119},{"icon":120,"href":121,"dataGaName":122,"dataGaLocation":44},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[124,128,132,137],{"text":125,"config":126},"CI/CD",{"href":127,"dataGaLocation":44,"dataGaName":125},"/de-de/solutions/continuous-integration/",{"text":129,"config":130},"KI-unterstützte Entwicklung",{"href":78,"dataGaLocation":44,"dataGaName":131},"AI assisted development",{"text":133,"config":134},"Quellcodeverwaltung",{"href":135,"dataGaLocation":44,"dataGaName":136},"/de-de/solutions/source-code-management/","Source Code Management",{"text":138,"config":139},"Automatisierte Softwarebereitstellung",{"href":121,"dataGaLocation":44,"dataGaName":140},"Automated software delivery",{"title":142,"description":143,"link":144,"items":149},"Sicherheit","Entwickle schneller, ohne die Sicherheit zu gefährden",{"config":145},{"href":146,"dataGaName":147,"dataGaLocation":44,"icon":148},"/de-de/solutions/security-compliance/","security and compliance","ShieldCheckLight",[150,155,160],{"text":151,"config":152},"Application Security Testing",{"href":153,"dataGaName":154,"dataGaLocation":44},"/solutions/application-security-testing/","Application security testing",{"text":156,"config":157},"Schutz der Software-Lieferkette",{"href":158,"dataGaLocation":44,"dataGaName":159},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":161,"config":162},"Software Compliance",{"href":163,"dataGaName":161,"dataGaLocation":44},"/solutions/software-compliance/",{"title":165,"link":166,"items":171},"Bewertung",{"config":167},{"icon":168,"href":169,"dataGaName":170,"dataGaLocation":44},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[172,176,181],{"text":173,"config":174},"Sichtbarkeit und Bewertung",{"href":169,"dataGaLocation":44,"dataGaName":175},"Visibility and Measurement",{"text":177,"config":178},"Wertstrommanagement",{"href":179,"dataGaLocation":44,"dataGaName":180},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":182,"config":183},"Analysen und Einblicke",{"href":184,"dataGaLocation":44,"dataGaName":185},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":187,"items":188},"GitLab für",[189,194,199],{"text":190,"config":191},"Enterprise",{"href":192,"dataGaLocation":44,"dataGaName":193},"/de-de/enterprise/","enterprise",{"text":195,"config":196},"Kleinunternehmen",{"href":197,"dataGaLocation":44,"dataGaName":198},"/de-de/small-business/","small business",{"text":200,"config":201},"den öffentlichen Sektor",{"href":202,"dataGaLocation":44,"dataGaName":203},"/de-de/solutions/public-sector/","public sector",{"text":205,"config":206},"Preise",{"href":207,"dataGaName":208,"dataGaLocation":44,"dataNavLevelOne":208},"/de-de/pricing/","pricing",{"text":210,"config":211,"link":213,"lists":217,"feature":301},"Ressourcen",{"dataNavLevelOne":212},"resources",{"text":214,"config":215},"Alle Ressourcen anzeigen",{"href":216,"dataGaName":212,"dataGaLocation":44},"/de-de/resources/",[218,251,273],{"title":219,"items":220},"Erste Schritte",[221,226,231,236,241,246],{"text":222,"config":223},"Installieren",{"href":224,"dataGaName":225,"dataGaLocation":44},"/de-de/install/","install",{"text":227,"config":228},"Kurzanleitungen",{"href":229,"dataGaName":230,"dataGaLocation":44},"/de-de/get-started/","quick setup checklists",{"text":232,"config":233},"Lernen",{"href":234,"dataGaLocation":44,"dataGaName":235},"https://university.gitlab.com/","learn",{"text":237,"config":238},"Produktdokumentation",{"href":239,"dataGaName":240,"dataGaLocation":44},"https://docs.gitlab.com/","product documentation",{"text":242,"config":243},"Best-Practice-Videos",{"href":244,"dataGaName":245,"dataGaLocation":44},"/de-de/getting-started-videos/","best practice videos",{"text":247,"config":248},"Integrationen",{"href":249,"dataGaName":250,"dataGaLocation":44},"/de-de/integrations/","integrations",{"title":252,"items":253},"Entdecken",[254,259,263,268],{"text":255,"config":256},"Kundenerfolge",{"href":257,"dataGaName":258,"dataGaLocation":44},"/de-de/customers/","customer success stories",{"text":260,"config":261},"Blog",{"href":262,"dataGaName":5,"dataGaLocation":44},"/de-de/blog/",{"text":264,"config":265},"Remote",{"href":266,"dataGaName":267,"dataGaLocation":44},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":269,"config":270},"TeamOps",{"href":271,"dataGaName":272,"dataGaLocation":44},"/de-de/teamops/","teamops",{"title":274,"items":275},"Vernetzen",[276,281,286,291,296],{"text":277,"config":278},"GitLab-Services",{"href":279,"dataGaName":280,"dataGaLocation":44},"/de-de/services/","services",{"text":282,"config":283},"Community",{"href":284,"dataGaName":285,"dataGaLocation":44},"/community/","community",{"text":287,"config":288},"Forum",{"href":289,"dataGaName":290,"dataGaLocation":44},"https://forum.gitlab.com/","forum",{"text":292,"config":293},"Veranstaltungen",{"href":294,"dataGaName":295,"dataGaLocation":44},"/events/","events",{"text":297,"config":298},"Partner",{"href":299,"dataGaName":300,"dataGaLocation":44},"/de-de/partners/","partners",{"backgroundColor":302,"textColor":303,"text":304,"image":305,"link":309},"#2f2a6b","#fff","Perspektiven für die Softwareentwicklung der Zukunft",{"altText":306,"config":307},"the source promo card",{"src":308},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":310,"config":311},"Lies die News",{"href":312,"dataGaName":313,"dataGaLocation":44},"/de-de/the-source/","the source",{"text":315,"config":316,"lists":318},"Unternehmen",{"dataNavLevelOne":317},"company",[319],{"items":320},[321,326,332,334,339,344,349,354,359,364,369],{"text":322,"config":323},"Über",{"href":324,"dataGaName":325,"dataGaLocation":44},"/de-de/company/","about",{"text":327,"config":328,"footerGa":331},"Karriere",{"href":329,"dataGaName":330,"dataGaLocation":44},"/jobs/","jobs",{"dataGaName":330},{"text":292,"config":333},{"href":294,"dataGaName":295,"dataGaLocation":44},{"text":335,"config":336},"Geschäftsführung",{"href":337,"dataGaName":338,"dataGaLocation":44},"/company/team/e-group/","leadership",{"text":340,"config":341},"Team",{"href":342,"dataGaName":343,"dataGaLocation":44},"/company/team/","team",{"text":345,"config":346},"Handbuch",{"href":347,"dataGaName":348,"dataGaLocation":44},"https://handbook.gitlab.com/","handbook",{"text":350,"config":351},"Investor Relations",{"href":352,"dataGaName":353,"dataGaLocation":44},"https://ir.gitlab.com/","investor relations",{"text":355,"config":356},"Trust Center",{"href":357,"dataGaName":358,"dataGaLocation":44},"/de-de/security/","trust center",{"text":360,"config":361},"AI Transparency Center",{"href":362,"dataGaName":363,"dataGaLocation":44},"/de-de/ai-transparency-center/","ai transparency center",{"text":365,"config":366},"Newsletter",{"href":367,"dataGaName":368,"dataGaLocation":44},"/company/contact/","newsletter",{"text":370,"config":371},"Presse",{"href":372,"dataGaName":373,"dataGaLocation":44},"/press/","press",{"text":375,"config":376,"lists":377},"Kontakt",{"dataNavLevelOne":317},[378],{"items":379},[380,383,388],{"text":51,"config":381},{"href":53,"dataGaName":382,"dataGaLocation":44},"talk to sales",{"text":384,"config":385},"Support",{"href":386,"dataGaName":387,"dataGaLocation":44},"/support/","get help",{"text":389,"config":390},"Kundenportal",{"href":391,"dataGaName":392,"dataGaLocation":44},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":394,"login":395,"suggestions":402},"Schließen",{"text":396,"link":397},"Um Repositories und Projekte zu durchsuchen, melde dich an bei",{"text":398,"config":399},"gitlab.com",{"href":58,"dataGaName":400,"dataGaLocation":401},"search login","search",{"text":403,"default":404},"Vorschläge",[405,408,413,415,420,425],{"text":73,"config":406},{"href":78,"dataGaName":407,"dataGaLocation":401},"GitLab Duo (AI)",{"text":409,"config":410},"Code Suggestions (KI)",{"href":411,"dataGaName":412,"dataGaLocation":401},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":125,"config":414},{"href":127,"dataGaName":125,"dataGaLocation":401},{"text":416,"config":417},"GitLab auf AWS",{"href":418,"dataGaName":419,"dataGaLocation":401},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":421,"config":422},"GitLab auf Google Cloud",{"href":423,"dataGaName":424,"dataGaLocation":401},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":426,"config":427},"Warum GitLab?",{"href":86,"dataGaName":428,"dataGaLocation":401},"Why GitLab?",{"freeTrial":430,"mobileIcon":435,"desktopIcon":440},{"text":431,"config":432},"Kostenlos testen",{"href":433,"dataGaName":49,"dataGaLocation":434},"https://gitlab.com/-/trials/new/","nav",{"altText":436,"config":437},"GitLab-Symbol",{"src":438,"dataGaName":439,"dataGaLocation":434},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":436,"config":441},{"src":442,"dataGaName":439,"dataGaLocation":434},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":444,"mobileIcon":448,"desktopIcon":450},{"text":445,"config":446},"Erfahre mehr über GitLab Duo",{"href":78,"dataGaName":447,"dataGaLocation":434},"gitlab duo",{"altText":436,"config":449},{"src":438,"dataGaName":439,"dataGaLocation":434},{"altText":436,"config":451},{"src":442,"dataGaName":439,"dataGaLocation":434},"content:shared:de-de:main-navigation.yml","Main Navigation","shared/de-de/main-navigation.yml","shared/de-de/main-navigation",{"_path":457,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"title":458,"button":459,"config":464,"_id":466,"_type":30,"_source":32,"_file":467,"_stem":468,"_extension":35},"/shared/de-de/banner","GitLab Duo Agent Platform ist jetzt in öffentlicher Beta!",{"text":460,"config":461},"Beta testen",{"href":462,"dataGaName":463,"dataGaLocation":44},"/de-de/gitlab-duo/agent-platform/","duo banner",{"layout":465},"release","content:shared:de-de:banner.yml","shared/de-de/banner.yml","shared/de-de/banner",{"_path":470,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":471,"_id":675,"_type":30,"title":676,"_source":32,"_file":677,"_stem":678,"_extension":35},"/shared/de-de/main-footer",{"text":472,"source":473,"edit":479,"contribute":484,"config":489,"items":494,"minimal":667},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":474,"config":475},"Quelltext der Seite anzeigen",{"href":476,"dataGaName":477,"dataGaLocation":478},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":480,"config":481},"Diese Seite bearbeiten",{"href":482,"dataGaName":483,"dataGaLocation":478},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":485,"config":486},"Beteilige dich",{"href":487,"dataGaName":488,"dataGaLocation":478},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":490,"facebook":491,"youtube":492,"linkedin":493},"https://x.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[495,518,573,603,637],{"title":62,"links":496,"subMenu":501},[497],{"text":498,"config":499},"DevSecOps-Plattform",{"href":71,"dataGaName":500,"dataGaLocation":478},"devsecops platform",[502],{"title":205,"links":503},[504,508,513],{"text":505,"config":506},"Tarife anzeigen",{"href":207,"dataGaName":507,"dataGaLocation":478},"view plans",{"text":509,"config":510},"Vorteile von Premium",{"href":511,"dataGaName":512,"dataGaLocation":478},"/de-de/pricing/premium/","why premium",{"text":514,"config":515},"Vorteile von Ultimate",{"href":516,"dataGaName":517,"dataGaLocation":478},"/de-de/pricing/ultimate/","why ultimate",{"title":519,"links":520},"Lösungen",[521,526,529,531,536,541,545,548,551,556,558,560,563,568],{"text":522,"config":523},"Digitale Transformation",{"href":524,"dataGaName":525,"dataGaLocation":478},"/de-de/topics/digital-transformation/","digital transformation",{"text":527,"config":528},"Sicherheit und Compliance",{"href":153,"dataGaName":154,"dataGaLocation":478},{"text":138,"config":530},{"href":121,"dataGaName":122,"dataGaLocation":478},{"text":532,"config":533},"Agile Entwicklung",{"href":534,"dataGaName":535,"dataGaLocation":478},"/de-de/solutions/agile-delivery/","agile delivery",{"text":537,"config":538},"Cloud-Transformation",{"href":539,"dataGaName":540,"dataGaLocation":478},"/de-de/topics/cloud-native/","cloud transformation",{"text":542,"config":543},"SCM",{"href":135,"dataGaName":544,"dataGaLocation":478},"source code management",{"text":125,"config":546},{"href":127,"dataGaName":547,"dataGaLocation":478},"continuous integration & delivery",{"text":177,"config":549},{"href":179,"dataGaName":550,"dataGaLocation":478},"value stream management",{"text":552,"config":553},"GitOps",{"href":554,"dataGaName":555,"dataGaLocation":478},"/de-de/solutions/gitops/","gitops",{"text":190,"config":557},{"href":192,"dataGaName":193,"dataGaLocation":478},{"text":195,"config":559},{"href":197,"dataGaName":198,"dataGaLocation":478},{"text":561,"config":562},"Öffentlicher Sektor",{"href":202,"dataGaName":203,"dataGaLocation":478},{"text":564,"config":565},"Bildungswesen",{"href":566,"dataGaName":567,"dataGaLocation":478},"/de-de/solutions/education/","education",{"text":569,"config":570},"Finanzdienstleistungen",{"href":571,"dataGaName":572,"dataGaLocation":478},"/de-de/solutions/finance/","financial services",{"title":210,"links":574},[575,577,579,581,584,586,589,591,593,595,597,599,601],{"text":222,"config":576},{"href":224,"dataGaName":225,"dataGaLocation":478},{"text":227,"config":578},{"href":229,"dataGaName":230,"dataGaLocation":478},{"text":232,"config":580},{"href":234,"dataGaName":235,"dataGaLocation":478},{"text":237,"config":582},{"href":239,"dataGaName":583,"dataGaLocation":478},"docs",{"text":260,"config":585},{"href":262,"dataGaName":5,"dataGaLocation":478},{"text":255,"config":587},{"href":588,"dataGaName":258,"dataGaLocation":478},"/customers/",{"text":264,"config":590},{"href":266,"dataGaName":267,"dataGaLocation":478},{"text":277,"config":592},{"href":279,"dataGaName":280,"dataGaLocation":478},{"text":269,"config":594},{"href":271,"dataGaName":272,"dataGaLocation":478},{"text":282,"config":596},{"href":284,"dataGaName":285,"dataGaLocation":478},{"text":287,"config":598},{"href":289,"dataGaName":290,"dataGaLocation":478},{"text":292,"config":600},{"href":294,"dataGaName":295,"dataGaLocation":478},{"text":297,"config":602},{"href":299,"dataGaName":300,"dataGaLocation":478},{"title":315,"links":604},[605,607,609,611,613,615,617,621,626,628,630,632],{"text":322,"config":606},{"href":324,"dataGaName":317,"dataGaLocation":478},{"text":327,"config":608},{"href":329,"dataGaName":330,"dataGaLocation":478},{"text":335,"config":610},{"href":337,"dataGaName":338,"dataGaLocation":478},{"text":340,"config":612},{"href":342,"dataGaName":343,"dataGaLocation":478},{"text":345,"config":614},{"href":347,"dataGaName":348,"dataGaLocation":478},{"text":350,"config":616},{"href":352,"dataGaName":353,"dataGaLocation":478},{"text":618,"config":619},"Sustainability",{"href":620,"dataGaName":618,"dataGaLocation":478},"/sustainability/",{"text":622,"config":623},"Vielfalt, Inklusion und Zugehörigkeit",{"href":624,"dataGaName":625,"dataGaLocation":478},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":355,"config":627},{"href":357,"dataGaName":358,"dataGaLocation":478},{"text":365,"config":629},{"href":367,"dataGaName":368,"dataGaLocation":478},{"text":370,"config":631},{"href":372,"dataGaName":373,"dataGaLocation":478},{"text":633,"config":634},"Transparenzerklärung zu moderner Sklaverei",{"href":635,"dataGaName":636,"dataGaLocation":478},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":638,"links":639},"Nimm Kontakt auf",[640,643,645,647,652,657,662],{"text":641,"config":642},"Sprich mit einem Experten/einer Expertin",{"href":53,"dataGaName":54,"dataGaLocation":478},{"text":384,"config":644},{"href":386,"dataGaName":387,"dataGaLocation":478},{"text":389,"config":646},{"href":391,"dataGaName":392,"dataGaLocation":478},{"text":648,"config":649},"Status",{"href":650,"dataGaName":651,"dataGaLocation":478},"https://status.gitlab.com/","status",{"text":653,"config":654},"Nutzungsbedingungen",{"href":655,"dataGaName":656,"dataGaLocation":478},"/terms/","terms of use",{"text":658,"config":659},"Datenschutzerklärung",{"href":660,"dataGaName":661,"dataGaLocation":478},"/de-de/privacy/","privacy statement",{"text":663,"config":664},"Cookie-Einstellungen",{"dataGaName":665,"dataGaLocation":478,"id":666,"isOneTrustButton":107},"cookie preferences","ot-sdk-btn",{"items":668},[669,671,673],{"text":653,"config":670},{"href":655,"dataGaName":656,"dataGaLocation":478},{"text":658,"config":672},{"href":660,"dataGaName":661,"dataGaLocation":478},{"text":663,"config":674},{"dataGaName":665,"dataGaLocation":478,"id":666,"isOneTrustButton":107},"content:shared:de-de:main-footer.yml","Main Footer","shared/de-de/main-footer.yml","shared/de-de/main-footer",[680],{"_path":681,"_dir":682,"_draft":6,"_partial":6,"_locale":7,"content":683,"config":687,"_id":689,"_type":30,"title":690,"_source":32,"_file":691,"_stem":692,"_extension":35},"/en-us/blog/authors/tobias-gnther","authors",{"name":18,"config":684},{"headshot":685,"ctfId":686},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Tobias-Gnther",{"template":688},"BlogAuthor","content:en-us:blog:authors:tobias-gnther.yml","Tobias Gnther","en-us/blog/authors/tobias-gnther.yml","en-us/blog/authors/tobias-gnther",{"_path":694,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"header":695,"eyebrow":696,"blurb":697,"button":698,"secondaryButton":702,"_id":704,"_type":30,"title":705,"_source":32,"_file":706,"_stem":707,"_extension":35},"/shared/de-de/next-steps","Stelle jetzt bessere Software schneller bereit","Mehr als 50 % der Fortune-100-Unternehmen vertrauen GitLab","Erlebe, was dein Team mit der intelligenten\n\n\nDevSecOps-Plattform erreichen kann.\n",{"text":46,"config":699},{"href":700,"dataGaName":49,"dataGaLocation":701},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":51,"config":703},{"href":53,"dataGaName":54,"dataGaLocation":701},"content:shared:de-de:next-steps.yml","Next Steps","shared/de-de/next-steps.yml","shared/de-de/next-steps",1758326186693]