[{"data":1,"prerenderedAt":711},["ShallowReactive",2],{"/de-de/blog/keeping-git-commit-history-clean":3,"navigation-de-de":36,"banner-de-de":455,"footer-de-de":468,"Kushal Pandya":677,"footer-source-/de-de/blog/keeping-git-commit-history-clean/":690,"next-steps-de-de":696},{"_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/keeping-git-commit-history-clean","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"4 Situationen, in denen sich eine aufgeräumte Git-Commit-Historie lohnt ","Erfahre, warum eine saubere Git-Commit-Historie die Nachvollziehbarkeit verbessert, Fehler behebt und die Codequalität steigert.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659457/Blog/Hero%20Images/keep-git-commit-history-clean.jpg","https://about.gitlab.com/blog/keeping-git-commit-history-clean","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"4 Situationen, in denen sich eine aufgeräumte Git-Commit-Historie lohnt \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Kushal Pandya\"}],\n        \"datePublished\": \"2018-06-07\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22,"updatedDate":25},[18],"Kushal Pandya","2018-06-07","Git-Commits sind einer der Eckpfeiler eines Git-Repositorys. Die\nCommit-Nachrichten sind wie ein Lebensprotokoll für das Repository. Während\nsich das Projekt/Repository im Laufe der Zeit entwickelt – sei es durch das\nHinzufügen neuer Funktionen, das Beheben von Fehlern oder die Überarbeitung\nder Architektur – geben die Commit-Nachrichten Aufschluss darüber, was genau\ngeändert wurde. Daher ist es entscheidend, dass diese Nachrichten die\nzugrunde liegende Änderung präzise und kurz wiedergeben. Die Commit-Historie\nkann leicht verfälscht werden. In diesem Artikel erfährst du, wie du sie\nkorrigieren kannst!\n\n\n> **Nahezu 100 % Uptime: NVIDIA skaliert mit GitLab global – ohne Ausfallzeiten** Verteilte Teams bei NVIDIA profitieren mit GitLab Geo von schneller verfügbaren Repositories, häufigeren Upgrades ohne Ausfallzeiten und global-synchronen sowie -sicheren Projekten. Erfahre, wie GitLab Premium hilft, Stabilität, Transparenz und Effizienz zu verbessern. **[Erfolgsstory lesen](https://about.gitlab.com/de-de/customers/nvidia/)**\n\n\n## Warum eine aussagekräftige Git-Commit-Historie wichtig ist\n\n\nWas bewirkt ein Git-Commit? Git-Commit-Nachrichten sind die Fingerabdrücke,\ndie du auf dem Code hinterlässt, den du bearbeitest. Wenn du heute einen\nCode festlegst, ist es wichtig, eine klare und aussagekräftige\nCommit-Nachricht zu schreiben, damit du diese auch später noch\nnachvollziehen kannst. Indem Git-Commits kontextabhängig isoliert werden,\nist ein Fehler, der durch einen einzelnen Commit verursacht wurde, schneller\nzu finden. Zudem ist es einfacher, den Commit rückgängig zu machen, der den\nFehler verursacht hat.\n\n\nBei der Arbeit an großen Projekten haben wir oft mit vielen verschiedenen\nKomponenten, die aktualisiert, hinzugefügt oder entfernt werden, zu tun. In\nsolchen Fällen kann es schwierig sein, die Commit-Nachrichten zu pflegen,\ninsbesondere wenn sich die Entwicklung über Tage, Wochen oder sogar Monate\nerstreckt. Um die Wartung eines übersichtlichen Commit-Verlaufs zu\nerleichtern, findest du nachfolgend die vier häufigsten Situationen, mit\ndenen ein Entwickler(innen) bei der Arbeit an einem Git-Repository\nkonfrontiert werden kann.\n\n\n1. Situation 1: Ich muss den letzten Commit ändern\n\n2. Situation 2: Ich muss einen bestimmten Commit ändern\n\n3. Situation 3: Ich muss Commits hinzufügen, entfernen oder kombinieren\n\n4. Situation 4: Mein Commit-Verlauf macht keinen Sinn, ich muss nochmal von\nvorne anfangen\n\n\nBevor wir jedoch tiefer eintauchen, werfen wir einen kurzen Blick auf einen\ntypischen Entwicklungsablauf in unserer hypothetischen Ruby-Anwendung.\n\n\n__Hinweis:__ In diesem Artikel wird vorausgesetzt, dass du mit den\nGrundlagen von Git vertraut bist und weißt, wie Branches funktionieren, wie\nnicht übertragene Änderungen eines Branches zum Staging-Bereich hinzugefügt\nund wie Änderungen übertragen werden. Wenn du unsicher bist, bietet unsere\nDokumentation einen guten Ausgangspunkt.\n\n\n## Beispielprojekt: Neue Navigationsansicht\n\n\nNachfolgend siehst du ein Ruby-on-Rails-Projekt, in dem eine\nNavigationsansicht auf der Homepage hinzugefügt werden muss. Dazu müssen\nmehrere Dateien aktualisiert und hinzugefügt werden. Im Folgenden findest du\neine schrittweise Aufschlüsselung des gesamten Ablaufs:\n\n\n- Du startest die Arbeit an einem Feature, indem du eine einzelne Datei\naktualisierst. Zum Beispiel: `application_controller.rb`\n\n- Für dieses Feature musst du auch eine Ansicht aktualisieren:\n`index.html.haml`\n\n- Du hast einen Teilbereich hinzugefügt, der auf der Indexseite verwendet\nwird: `_navigation.html.haml`\n\n- Die Formatvorlagen für die Seite müssen ebenfalls aktualisiert werden, um\nden hinzugefügten Teil widerzuspiegeln: `styles.css.scss`\n\n- Das Feature ist nun mit den gewünschten Änderungen fertiggestellt. Jetzt\nmusst du die Tests aktualisieren. Dazu gehören die folgenden Dateien:\n  - `application_controller_spec.rb`\n  - `navigation_spec.rb`\n- Die Tests wurden aktualisiert und laufen wie erwartet. Jetzt werden die\nÄnderungen übertragen.\n\n\nDa alle Dateien zu verschiedenen Bereichen der Architektur gehören, werden\ndie Änderungen isoliert voneinander übertragen. Dies gewährleistet, dass\njede Übertragung einen spezifischen Kontext repräsentiert und in einer\nbestimmten Reihenfolge durchgeführt wird. Im Allgemeinen wird die\nReihenfolge von Backend -> Frontend bevorzugt. Dies bedeutet, dass die\nmeisten Backend-bezogenen Änderungen zuerst übertragen werden, gefolgt von\nder mittleren Schicht und dann von den Frontend-bezogenen Änderungen in den\nGit-Commits.\n\n\n1. `application_controller.rb` & `application_controller_spec.rb`:\n__Hinzufügen von Routen für die Navigation.__\n\n2. `_navigation.html.haml` & `navigation_spec.rb`: __Ansicht der\nSeitennavigation.__\n\n3. `index.html.haml`: __Navigation teilweise rendern.__\n\n4. `styles.css.scss`: __Stile für die Navigation hinzufügen.__\n\n\nNachdem die Änderungen übertragen wurden, wird eine Anfrage zur\nZusammenführung mit dem Branch erstellt. Sobald du eine Merge-Anfrage\ngeöffnet hast, wird sie in der Regel von deinem Peer überprüft, bevor die\nÄnderungen im Master-Branch des Repositories zusammengeführt werden. Im\nFolgenden werden die verschiedenen Situationen beschrieben, die bei der\nCodeüberprüfung auftreten können.\n\n\n## Situation 1: Ändern des letzten Git-Commits\n\n\nIm Fall, dass der Prüfer die Datei `styles.css.scss` überprüft und eine\nÄnderung vorgeschlagen hat, ist es recht einfach, die Änderung vorzunehmen,\nda die Stylesheet-Änderungen Teil des __letzten__ Commits in deinem Branch\nsind. So kannst du damit umgehen:\n\n\n- Führe die erforderlichen Änderungen an `styles.css.scss` direkt in deinem\naktuellen Branch durch.\n\n- Sobald du mit den Änderungen fertig bist, füge sie zum Staging-Bereich\nhinzu, indem du `git add styles.css.scss` ausführst.\n\n- Nachdem die Änderungen bereitgestellt wurden, füge sie zu deinem letzten\nCommit hinzu, indem du `git commit --amend` ausführst.\n    - __Aufschlüsselung des Befehls__: Mit dem `git commit`-Befehl werden alle Änderungen, die sich im Staging-Bereich befinden, dem letzten Commit hinzugefügt.\n- Dadurch wird der von Git definierte Texteditor geöffnet, der die\nCommit-Nachricht __„Stile für die Navigation hinzufügen”__ enthält, die\nbereits beim vorherigen Commit festgelegt wurde.\n\n- Da nur die CSS-Deklaration aktualisiert wurde, muss die Commit-Nachricht\nnicht geändert werden. An dieser Stelle kannst du einfach speichern und den\nTexteditor, den Git für dich geöffnet hat, beenden. Deine Änderungen werden\ndann in den Commit übernommen.\n\n\nDa du ein bestehendes Git-Commit geändert hast, müssen diese Änderungen\nzwangsweise in dein Repository übertragen werden. Dazu nutzt du  `git push\n--force-with-lease \u003Cremote_name> \u003Cbranch_name>`. Dieser Befehl überschreibt\ndas Commit `Add styles for navigation` im entfernten Repository mit dem\naktualisierten Commit, das gerade im lokalen Repository vorgenommen wurde.\n\n\nWenn mehrere Personen an einem Branch arbeiten, kann ein erzwungener Push\nvon Branches dazu führen, dass andere Benutzer Probleme bekommen, wenn sie\nversuchen, ihre Änderungen auf einen entfernten Branch zu pushen, in dem\nbereits neue Commits gepusht wurden. Daher sollte diese Funktion mit Bedacht\neingesetzt werden. Weitere Informationen zu den Force-Push-Optionen von Git\nfindest du\n[hier](https://git-scm.com/docs/git-push#git-push---no-force-with-lease\n\"hier\").\n\n\n## Situation 2: Ändern einer bestimmten Git-Commit-Änderung\n\n\nIn der vorherigen Situation war die Änderung des Git-Commits recht einfach,\nda nur der letzte Git-Commit geändert werden musste. Stell dir jedoch vor,\nein Prüfer würde vorschlagen, etwas in `_navigation.html.haml` zu ändern. In\ndiesem Fall handelt es sich um den zweiten Commit von oben, sodass die\nÄnderung nicht so direkt ist wie in der ersten Situation. \n\n\nJeder Commit in einem Branch wird durch eine eindeutige\nSHA-1-Hash-Zeichenkette identifiziert. Diese dient als eine Art eindeutige\nID, die einen Commit von einem anderen unterscheidet. Du kannst alle\nvorherigen Commits zusammen mit ihren SHA-1-Hashes in einem Branch anzeigen,\nindem du den Befehl `git log` ausführst. Das Ergebnis ist eine Liste von\nCommits, wobei die neuesten Commits ganz oben stehen.\n\n\n```\n\ncommit aa0a35a867ed2094da60042062e8f3d6000e3952 (HEAD ->\nadd-page-navigation)\n\nAuthor: Kushal Pandya \u003Ckushal@gitlab.com>\n\nDate: Wed May 2 15:24:02 2018 +0530\n\n    Add styles for navigation\n\ncommit c22a3fa0c5cdc175f2b8232b9704079d27c619d0\n\nAuthor: Kushal Pandya \u003Ckushal@gitlab.com>\n\nDate: Wed May 2 08:42:52 2018 +0000\n\n    Render navigation partial\n\ncommit 4155df1cdc7be01c98b0773497ff65c22ba1549f\n\nAuthor: Kushal Pandya \u003Ckushal@gitlab.com>\n\nDate: Wed May 2 08:42:51 2018 +0000\n\n    Page Navigation View\n\ncommit 8d74af102941aa0b51e1a35b8ad731284e4b5a20\n\nAuthor: Kushal Pandya \u003Ckushal@gitlab.com>\n\nDate: Wed May 2 08:12:20 2018 +0000\n\n    Add routes for navigation\n```\n\n\nAn dieser Stelle kommt der Befehl `git rebase` ins Spiel. Wenn wir einen\nbestimmten Commit mit `git rebase` bearbeiten wollen, müssen wir zunächst\nunseren Branch neu erstellen, indem wir HEAD bis zu dem Punkt vor dem Commit\nzurücksetzen, den wir bearbeiten wollen. In unserem Fall müssen wir den\nCommit ändern, der `Page Navigation View` lautet.\n\n\n![Ansicht Page Navigation\nView](https://about.gitlab.com/images/blogimages/keeping-git-commit-history-clean/GitRebase.png){:\n.shadow.center.medium}\n\n\n- Achte auf den Hash des Commits, der direkt vor dem Commit liegt, den wir\nändern möchten. Kopiere den Hash und führe die folgenden Schritte aus:\n\n- Verschiebe den Branch auf einen Commit vor unserem Ziel-Commit; führe `git\nrebase -i8d74af102941aa0b51e1a35b8ad731284e4b5a20` aus.\n    - __Aufschlüsselung der Git-Befehle:__ Hier führen wir den Git-Befehl `rebase` im interaktiven Modus aus und geben einen SHA-1-Hash als Commit an, auf den `rebase` erfolgen soll.\n- Dieser Befehl führt den rebase-Befehl für Git im interaktiven Modus aus\nund öffnet den Texteditor, der alle Commits anzeigt, die auf den Commit\nfolgen, auf den du den `rebase` durchführen möchtest. Der Texteditor sollte\nin etwa so aussehen:\n\n\n```\n\npick 4155df1cdc7 Page Navigation View\n\npick c22a3fa0c5c Render navigation partial\n\npick aa0a35a867e Add styles for navigation\n\n\n# Rebase 8d74af10294..aa0a35a867e onto 8d74af10294 (3 commands)\n\n#\n\n# Commands:\n\n# p, pick = use commit\n\n# r, reword = use commit, but edit the commit message\n\n# e, edit = use commit, but stop for amending\n\n# s, squash = use commit, but meld into previous commit\n\n# f, fixup = like \"squash\", but discard this commit's log message\n\n# x, exec = run command (the rest of the line) using shell\n\n# d, drop = remove Git commit\n\n#\n\n# These lines can be re-ordered; they are executed from top to bottom.\n\n#\n\n# If you remove a line here THAT COMMIT WILL BE LOST.\n\n#\n\n# However, if you remove everything, the rebase will be aborted.\n\n#\n\n# Note that empty commits are commented out\n\n```\n\n\nBeachte, dass jedem Commit das Wort `pick` vorangestellt ist. Im Inhalt\nunten sind alle möglichen Schlüsselwörter aufgeführt, die du verwenden\nkannst. Da du eine Übertragung bearbeiten möchtest, musst du `pick\n4155df1cdc7 Page Navigation View in edit 4155df1cdc7 Page Navigation View`\nändern. Speichere die Änderungen und verlasse den Editor.\n\n\nDer Branch wird nun auf den Zeitpunkt vor der Commit-Übergabe zurückgesetzt,\ndie die Datei `_navigation.html.haml` enthielt. Öffne die Datei und führe\ndie gewünschten Änderungen gemäß dem Feedback der Überprüfung durch. Sobald\ndu mit den Änderungen fertig bist, füge sie zum Staging-Bereich hinzu, indem\ndu `git add _navigation.html.haml` ausführst.\n\n\nNachdem die Änderungen bereitgestellt wurden, ist es an der Zeit, den Branch\nHEAD wieder auf den ursprünglichen Commit zurückzusetzen, wobei auch die neu\nhinzugefügten Änderungen berücksichtigt werden. Führe `git rebase\n--continue` aus. Dadurch wird dein Standardeditor im Terminal geöffnet und\nzeigt die Commit-Nachricht an, die während des Rebase bearbeitet wurde; in\ndiesem Fall Page `Navigation View`. Du kannst diese Nachricht ändern, wenn\ndu möchtest – zunächst bleibt sie jedoch unverändert. Speichere und beende\nden Editor.\n\n\nJetzt zeigt Git alle Commits an, die auf den Commit folgten, den du gerade\nbearbeitet hast. Der Branch `HEAD` ist jetzt wieder auf dem ursprünglichen\nobersten Commit. Er enthält auch die neuen Änderungen, die du an einem der\nCommits vorgenommen hast.\n\n\nDa du erneut einen Commit geändert hast, der bereits im entfernten\nRepository vorhanden ist, musst du diesen Branch noch einmal mit `git push\n--force-with-lease \u003Cremote_name> \u003Cbranch_name>` pushen.\n\n\n## Situation 3: Hinzufügen, Entfernen oder Kombinieren von Git-Commits\n\n\nEs kommt häufig vor, dass mehrere Commits gemacht wurden, nur um etwas zu\nkorrigieren, das bereits zuvor committed wurde. Jetzt möchtest du diese\nCommits so weit wie möglich reduzieren und mit den ursprünglichen Commits\nkombinieren.\n\n\nDazu musst du einfach den interaktiven Rebase wie in den anderen Szenarien\nstarten.\n\n\n```\n\npick 4155df1cdc7 Page Navigation View\n\npick c22a3fa0c5c Render navigation partial\n\npick aa0a35a867e Add styles for navigation\n\npick 62e858a322 Fix a typo\n\npick 5c25eb48c8 Ops another fix\n\npick 7f0718efe9 Fix 2\n\npick f0ffc19ef7 Argh Another fix!\n\n```\n\n\nNun stell dir vor, du möchtest all diese Korrekturen in `c22a3fa0c5c Render\nnavigation partial` kombinieren. Dazu musst du nur Folgendes tun:\n\n\n1. Verschiebe die Korrekturen nach oben, sodass sie sich direkt unter der\nCommit-Übergabe befinden, die du am Ende behalten möchtest.\n\n2. Ändere `pick` auf `squash` oder `fixup` für jede der Korrekturen.\n\n\n*Hinweis:* `squash` behält die Commit-Nachrichten der Git-Fixes in der\nBeschreibung bei. `fixup` vergisst die Commit-Nachrichten der Fixes und\nbehält das Original bei.\n\nDas Ergebnis sieht dann etwa so aus:\n\n\n```\n\npick 4155df1cdc7 Page Navigation View\n\npick c22a3fa0c5c Render navigation partial\n\nfixup 62e858a322 Fix a typo\n\nfixup 5c25eb48c8 Ops another fix\n\nfixup 7f0718efe9 Fix 2\n\nfixup f0ffc19ef7 Argh Another fix!\n\npick aa0a35a867e Add styles for navigation\n\n```\n\n\nSpeichere die Änderungen, beende den Editor und schon bist du fertig! Dies\nist der resultierende Verlauf:\n\n\n```\n\npick 4155df1cdc7 Page Navigation View\n\npick 96373c0bcf Render navigation partial\n\npick aa0a35a867e Add styles for navigation\n\n```\n\n\nWie zuvor musst du jetzt nur noch `git push --force-with-lease \u003Cremote_name>\n\u003Cbranch_name>` ausführen, damit die Änderungen sichtbar sind.\n\n\nWenn du einen Git-Commit vollständig aus dem Branch entfernen möchtest,\nschreibe statt `squash` oder `fixup` einfach `drop` oder lösche diese Zeile.\n\n\n## Vermeiden von Konflikten bei Git-Commits\n\n\nUm Konflikte zu vermeiden, solltest du sicherstellen, dass die Commits, die\ndu in der Zeitleiste nach vorne schiebst, nicht dieselben Dateien berühren,\ndie von den Commits nach ihnen bearbeitet werden.\n\n\n```\n\npick 4155df1cdc7 Page Navigation View\n\npick c22a3fa0c5c Render navigation partial\n\nfixup 62e858a322 Fix a typo                 # this changes styles.css\n\nfixup 5c25eb48c8 Ops another fix            # this changes image/logo.svg\n\nfixup 7f0718efe9 Fix 2                      # this changes styles.css\n\nfixup f0ffc19ef7 Argh Another fix!          # this changes styles.css\n\npick aa0a35a867e Add styles for navigation  # this changes index.html (no\nconflict)\n\n```\n\n\n## Extra-Tipp: Schnelle Git commit fixups\n\n\nWenn du genau weißt, welchen Commit du reparieren möchtest, musst du beim\nCommit keine Zeit damit verschwenden, dir gute temporäre Namen für \"Fix 1\",\n\"Fix 2\", ..., \"Fix 42\" auszudenken.\n\n\n### Step 1: `--fixup`\n\n\nNachdem du die Änderungen vorgenommen hast, um das zu reparieren, was\nrepariert werden muss, übergibst du einfach alle Änderungen mit Git wie\nfolgt:\n\n\n```\n\ngit commit --fixup c22a3fa0c5c\n\n```\n\n(Dies ist der Hash für den Commit `c22a3fa0c5c Render navigation partial`)\n\nDadurch wird diese Commit-Nachricht erzeugt: `fixup! Render navigation\npartial`.\n\n\n### Step 2: `--autosquash`\n\n\nEinfaches interaktives Rebase. Du kannst `git` die `fixups` automatisch an\nder richtigen Stelle platzieren lassen.\n\n\n`git rebase -i 4155df1cdc7 --autosquash`\n\n\nDer Verlauf wird folgendermaßen dargestellt:\n\n\n```\n\npick 4155df1cdc7 Page Navigation View\n\npick c22a3fa0c5c Render navigation partial\n\nfixup 62e858a322 Fix a typo\n\nfixup 5c25eb48c8 Ops another fix\n\nfixup 7f0718efe9 Fix 2\n\nfixup f0ffc19ef7 Argh Another fix!\n\npick aa0a35a867e Add styles for navigation\n\n```\n\n\nDu kannst sie einfach überprüfen und fortsetzen. \n\n\nFalls du experimentierfreudig bist, besteht die Möglichkeit, ein nicht\ninteraktives Rebase mit `git rebase --autosquash` durchzuführen. Dies sollte\njedoch mit Vorsicht geschehen, da du keine Möglichkeit hast, die Squashs vor\nihrer Anwendung zu überprüfen, was potenziell zu unerwarteten Ergebnissen\nführen kann.\n\n\n## Situation 4: Der Verlauf meiner Git-Commits ergibt keinen Sinn, ich\nmöchte von vorn beginnen!\n\n\nWenn wir an einer umfangreichen Funktion arbeiten, ist es üblich, dass wir\nmehrere Korrekturen und Rückmeldungen vornehmen, die häufig übertragen\nwerden. Anstatt den Branch ständig zu ändern, können wir das Aufräumen der\nGit-Commits bis zum Ende der Entwicklung aufschieben.\n\n\nIn solchen Fällen erweisen sich Patch-Dateien als äußerst praktisch. Bevor\nGit-basierte Dienste wie GitLab den Entwickler(inne)n zur Verfügung standen,\nwaren Patch-Dateien die wichtigste Methode, um bei der Zusammenarbeit an\ngroßen Open-Source-Projekten Code per E-Mail auszutauschen.\n\n\nAngenommen, du hast einen solchen Branch (z. B. \"`add-page-navigation`\"), in\ndem es tonnenweise Commits gibt, die die zugrunde liegenden Änderungen nicht\nklar vermitteln, dann kannst du folgendermaßen eine Patch-Datei für alle\nÄnderungen erstellen, die du in diesem Branch vorgenommen hast:\n\n\n- Um eine Patch-Datei zu erstellen, muss zunächst sichergestellt werden,\ndass der Branch alle Änderungen aus dem `master`-Branch enthält und keine\nKonflikte damit aufweist.\n\n- Um alle Änderungen vom Master-Branch in deinen\n`add-page-navigation`-Branch zu übernehmen, kannst du entweder `git rebase\nmaster` oder `git merge master` ausführen, während du im\n`add-page-navigation-Branch` ausgecheckt bist.\n\n- Nun erstellst du die Patch-Datei. Führe `git diff master\nadd-page-navigation > ~/add_page_navigation.patch` aus.\n  - __Aufschlüsselung des Befehls:__ Hier verwenden wir die Diff-Funktion von Git und fordern einen Vergleich zwischen dem `master`-Branch und dem `add-page-navigation`-Branch an. Die Ausgabe wird über das \"`>`\"-Symbol in eine Datei namens `add_page_navigation.patch` in unserem Benutzerverzeichnis (typischerweise ~/ in Unix-basierten Betriebssystemen) umgeleitet.\n  - Du kannst einen beliebigen Pfad angeben, in dem die Datei gespeichert werden soll. Der Dateiname und die Erweiterung können beliebig gewählt werden.\n  - Sobald der Befehl ausgeführt wurde und keine Fehler angezeigt werden, wird die Patch-Datei erstellt.\n  - Checke jetzt den `master`-Branch aus; führe `git checkout master` aus.\n  - Du kannst den Branch `add-page-navigation` aus deinem lokalen Repository löschen, indem du `git branch -D add-page-navigation` ausführst. Denke daran, dass die Änderungen dieses Branchs bereits in einer erstellten Patch-Datei enthalten sind.\n  - Erstelle nun einen neuen Branch mit demselben Namen (während `master` ausgecheckt ist); führe `git checkout -b add-page-navigation` aus.\n  - Zu diesem Zeitpunkt ist dies ein neuer Branch, der noch keine der Änderungen enthält.\n  - Zum Schluss werden die Änderungen aus der Patch-Datei übernommen; `git apply ~/add_page_navigation.patch`.\n  - Hier werden alle Änderungen in einen Branch übernommen und erscheinen als \"uncommitted\", so, als ob du alle Änderungen vorgenommen hättest, aber keine der Änderungen tatsächlich in den Branch übernommen wurden.\n  - Jetzt kannst du einzelne Dateien oder nach Einflussbereich gruppierte Dateien in der gewünschten Reihenfolge mit prägnanten Commit-Nachrichten übertragen.\n\nWie in vorherigen Situationen wurde der gesamte Branch geändert, also ist es\nan der Zeit, einen Push zu erzwingen!\n\n\n## Gründe, deine Git-Commit-Historie aufzuräumen\n\n\nBasierend auf den beschriebenen Situationen, gibt es sechs wichtige Gründe,\ndeine Git-Commit-Historie aufzuräumen:\n\n\n- __Bessere Nachvollziehbarkeit:__ Eine übersichtliche Commit-Historie\nerleichtert es Entwickler(innen)n, den [Verlauf des\nCodes](https://about.gitlab.com/de-de/solutions/source-code-management/\n\"Verlauf des Codes\") zu verstehen und Änderungen nachzuvollziehen.\n\n- __Effiziente Fehlerbehebung:__ Durch klare Commit-Nachrichten und eine\nstrukturierte Historie können Fehler schneller identifiziert und behoben\nwerden.\n\n- __Verbesserte Zusammenarbeit:__ Ein aufgeräumter Commit-Verlauf\nerleichtert die Zusammenarbeit im Team, da Entwickler(innen)schnell den\nKontext und den Zweck früherer Änderungen verstehen können.\n\n- __Effizientere Wartung:__ Weniger Zeit wird mit der Suche nach\nspezifischen Änderungen und deren Kontext verschwendet, was die Wartung des\nCodes effizienter macht.\n\n- __Verbesserte Codequalität:__ Eine saubere Commit-Historie fördert\nbewusstere Entscheidungen beim Committen und trägt so zur Verbesserung der\nCodequalität bei.\n\n- __Gesamtproduktivität steigern:__ Indem Entwickler(innen) weniger Zeit mit\nder Suche nach Informationen in der Commit-Historie verbringen, können sie\nsich besser auf die eigentliche Entwicklung konzentrieren und die\nGesamtproduktivität des Teams steigern.\n\n\nWenn du dich mit den Tipps vertraut gemacht hast, kannst du in der\n[offiziellen\nGit-Dokumentation](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History\n\"offiziellen Git-Dokumentation\") mehr über fortgeschrittene Konzepte zu\ndiesem Thema erfahren. Viel Spaß mit Git!\n","engineering",[23,24],"git","workflow","2024-10-10",{"slug":27,"featured":6,"template":28},"keeping-git-commit-history-clean","BlogPost","content:de-de:blog:keeping-git-commit-history-clean.yml","yaml","Keeping Git Commit History Clean","content","de-de/blog/keeping-git-commit-history-clean.yml","de-de/blog/keeping-git-commit-history-clean","yml",{"_path":37,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":39,"_id":451,"_type":30,"title":452,"_source":32,"_file":453,"_stem":454,"_extension":35},"/shared/de-de/main-navigation","de-de",{"logo":40,"freeTrial":45,"sales":50,"login":55,"items":60,"search":392,"minimal":428,"duo":442},{"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,203,208,313,373],{"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":185},"Produkt",true,{"dataNavLevelOne":109},"solutions",{"text":111,"config":112},"Alle Lösungen anzeigen",{"href":113,"dataGaName":109,"dataGaLocation":44},"/de-de/solutions/",[115,141,163],{"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/application-security-testing/","security and compliance","ShieldCheckLight",[150,154,159],{"text":151,"config":152},"Application Security Testing",{"href":146,"dataGaName":153,"dataGaLocation":44},"Application security testing",{"text":155,"config":156},"Schutz der Software-Lieferkette",{"href":157,"dataGaLocation":44,"dataGaName":158},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":160,"config":161},"Software Compliance",{"href":162,"dataGaName":160,"dataGaLocation":44},"/de-de/solutions/software-compliance/",{"title":164,"link":165,"items":170},"Bewertung",{"config":166},{"icon":167,"href":168,"dataGaName":169,"dataGaLocation":44},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[171,175,180],{"text":172,"config":173},"Sichtbarkeit und Bewertung",{"href":168,"dataGaLocation":44,"dataGaName":174},"Visibility and Measurement",{"text":176,"config":177},"Wertstrommanagement",{"href":178,"dataGaLocation":44,"dataGaName":179},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":181,"config":182},"Analysen und Einblicke",{"href":183,"dataGaLocation":44,"dataGaName":184},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":186,"items":187},"GitLab für",[188,193,198],{"text":189,"config":190},"Enterprise",{"href":191,"dataGaLocation":44,"dataGaName":192},"/de-de/enterprise/","enterprise",{"text":194,"config":195},"Kleinunternehmen",{"href":196,"dataGaLocation":44,"dataGaName":197},"/de-de/small-business/","small business",{"text":199,"config":200},"den öffentlichen Sektor",{"href":201,"dataGaLocation":44,"dataGaName":202},"/de-de/solutions/public-sector/","public sector",{"text":204,"config":205},"Preise",{"href":206,"dataGaName":207,"dataGaLocation":44,"dataNavLevelOne":207},"/de-de/pricing/","pricing",{"text":209,"config":210,"link":212,"lists":216,"feature":300},"Ressourcen",{"dataNavLevelOne":211},"resources",{"text":213,"config":214},"Alle Ressourcen anzeigen",{"href":215,"dataGaName":211,"dataGaLocation":44},"/de-de/resources/",[217,250,272],{"title":218,"items":219},"Erste Schritte",[220,225,230,235,240,245],{"text":221,"config":222},"Installieren",{"href":223,"dataGaName":224,"dataGaLocation":44},"/de-de/install/","install",{"text":226,"config":227},"Kurzanleitungen",{"href":228,"dataGaName":229,"dataGaLocation":44},"/de-de/get-started/","quick setup checklists",{"text":231,"config":232},"Lernen",{"href":233,"dataGaLocation":44,"dataGaName":234},"https://university.gitlab.com/","learn",{"text":236,"config":237},"Produktdokumentation",{"href":238,"dataGaName":239,"dataGaLocation":44},"https://docs.gitlab.com/","product documentation",{"text":241,"config":242},"Best-Practice-Videos",{"href":243,"dataGaName":244,"dataGaLocation":44},"/de-de/getting-started-videos/","best practice videos",{"text":246,"config":247},"Integrationen",{"href":248,"dataGaName":249,"dataGaLocation":44},"/de-de/integrations/","integrations",{"title":251,"items":252},"Entdecken",[253,258,262,267],{"text":254,"config":255},"Kundenerfolge",{"href":256,"dataGaName":257,"dataGaLocation":44},"/de-de/customers/","customer success stories",{"text":259,"config":260},"Blog",{"href":261,"dataGaName":5,"dataGaLocation":44},"/de-de/blog/",{"text":263,"config":264},"Remote",{"href":265,"dataGaName":266,"dataGaLocation":44},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":268,"config":269},"TeamOps",{"href":270,"dataGaName":271,"dataGaLocation":44},"/de-de/teamops/","teamops",{"title":273,"items":274},"Vernetzen",[275,280,285,290,295],{"text":276,"config":277},"GitLab-Services",{"href":278,"dataGaName":279,"dataGaLocation":44},"/de-de/services/","services",{"text":281,"config":282},"Community",{"href":283,"dataGaName":284,"dataGaLocation":44},"/community/","community",{"text":286,"config":287},"Forum",{"href":288,"dataGaName":289,"dataGaLocation":44},"https://forum.gitlab.com/","forum",{"text":291,"config":292},"Veranstaltungen",{"href":293,"dataGaName":294,"dataGaLocation":44},"/events/","events",{"text":296,"config":297},"Partner",{"href":298,"dataGaName":299,"dataGaLocation":44},"/de-de/partners/","partners",{"backgroundColor":301,"textColor":302,"text":303,"image":304,"link":308},"#2f2a6b","#fff","Perspektiven für die Softwareentwicklung der Zukunft",{"altText":305,"config":306},"the source promo card",{"src":307},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":309,"config":310},"Lies die News",{"href":311,"dataGaName":312,"dataGaLocation":44},"/de-de/the-source/","the source",{"text":314,"config":315,"lists":317},"Unternehmen",{"dataNavLevelOne":316},"company",[318],{"items":319},[320,325,331,333,338,343,348,353,358,363,368],{"text":321,"config":322},"Über",{"href":323,"dataGaName":324,"dataGaLocation":44},"/de-de/company/","about",{"text":326,"config":327,"footerGa":330},"Karriere",{"href":328,"dataGaName":329,"dataGaLocation":44},"/jobs/","jobs",{"dataGaName":329},{"text":291,"config":332},{"href":293,"dataGaName":294,"dataGaLocation":44},{"text":334,"config":335},"Geschäftsführung",{"href":336,"dataGaName":337,"dataGaLocation":44},"/company/team/e-group/","leadership",{"text":339,"config":340},"Team",{"href":341,"dataGaName":342,"dataGaLocation":44},"/company/team/","team",{"text":344,"config":345},"Handbuch",{"href":346,"dataGaName":347,"dataGaLocation":44},"https://handbook.gitlab.com/","handbook",{"text":349,"config":350},"Investor Relations",{"href":351,"dataGaName":352,"dataGaLocation":44},"https://ir.gitlab.com/","investor relations",{"text":354,"config":355},"Trust Center",{"href":356,"dataGaName":357,"dataGaLocation":44},"/de-de/security/","trust center",{"text":359,"config":360},"AI Transparency Center",{"href":361,"dataGaName":362,"dataGaLocation":44},"/de-de/ai-transparency-center/","ai transparency center",{"text":364,"config":365},"Newsletter",{"href":366,"dataGaName":367,"dataGaLocation":44},"/company/contact/","newsletter",{"text":369,"config":370},"Presse",{"href":371,"dataGaName":372,"dataGaLocation":44},"/press/","press",{"text":374,"config":375,"lists":376},"Kontakt",{"dataNavLevelOne":316},[377],{"items":378},[379,382,387],{"text":51,"config":380},{"href":53,"dataGaName":381,"dataGaLocation":44},"talk to sales",{"text":383,"config":384},"Support",{"href":385,"dataGaName":386,"dataGaLocation":44},"/support/","get help",{"text":388,"config":389},"Kundenportal",{"href":390,"dataGaName":391,"dataGaLocation":44},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":393,"login":394,"suggestions":401},"Schließen",{"text":395,"link":396},"Um Repositories und Projekte zu durchsuchen, melde dich an bei",{"text":397,"config":398},"gitlab.com",{"href":58,"dataGaName":399,"dataGaLocation":400},"search login","search",{"text":402,"default":403},"Vorschläge",[404,407,412,414,419,424],{"text":73,"config":405},{"href":78,"dataGaName":406,"dataGaLocation":400},"GitLab Duo (AI)",{"text":408,"config":409},"Code Suggestions (KI)",{"href":410,"dataGaName":411,"dataGaLocation":400},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":125,"config":413},{"href":127,"dataGaName":125,"dataGaLocation":400},{"text":415,"config":416},"GitLab auf AWS",{"href":417,"dataGaName":418,"dataGaLocation":400},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":420,"config":421},"GitLab auf Google Cloud",{"href":422,"dataGaName":423,"dataGaLocation":400},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":425,"config":426},"Warum GitLab?",{"href":86,"dataGaName":427,"dataGaLocation":400},"Why GitLab?",{"freeTrial":429,"mobileIcon":434,"desktopIcon":439},{"text":430,"config":431},"Kostenlos testen",{"href":432,"dataGaName":49,"dataGaLocation":433},"https://gitlab.com/-/trials/new/","nav",{"altText":435,"config":436},"GitLab-Symbol",{"src":437,"dataGaName":438,"dataGaLocation":433},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":435,"config":440},{"src":441,"dataGaName":438,"dataGaLocation":433},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":443,"mobileIcon":447,"desktopIcon":449},{"text":444,"config":445},"Erfahre mehr über GitLab Duo",{"href":78,"dataGaName":446,"dataGaLocation":433},"gitlab duo",{"altText":435,"config":448},{"src":437,"dataGaName":438,"dataGaLocation":433},{"altText":435,"config":450},{"src":441,"dataGaName":438,"dataGaLocation":433},"content:shared:de-de:main-navigation.yml","Main Navigation","shared/de-de/main-navigation.yml","shared/de-de/main-navigation",{"_path":456,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"title":457,"button":458,"config":463,"_id":465,"_type":30,"_source":32,"_file":466,"_stem":467,"_extension":35},"/shared/de-de/banner","GitLab Duo Agent Platform ist jetzt in öffentlicher Beta!",{"text":459,"config":460},"Beta testen",{"href":461,"dataGaName":462,"dataGaLocation":44},"/de-de/gitlab-duo/agent-platform/","duo banner",{"layout":464},"release","content:shared:de-de:banner.yml","shared/de-de/banner.yml","shared/de-de/banner",{"_path":469,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":470,"_id":673,"_type":30,"title":674,"_source":32,"_file":675,"_stem":676,"_extension":35},"/shared/de-de/main-footer",{"text":471,"source":472,"edit":478,"contribute":483,"config":488,"items":493,"minimal":665},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":473,"config":474},"Quelltext der Seite anzeigen",{"href":475,"dataGaName":476,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":479,"config":480},"Diese Seite bearbeiten",{"href":481,"dataGaName":482,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":484,"config":485},"Beteilige dich",{"href":486,"dataGaName":487,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":489,"facebook":490,"youtube":491,"linkedin":492},"https://x.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[494,517,572,601,635],{"title":62,"links":495,"subMenu":500},[496],{"text":497,"config":498},"DevSecOps-Plattform",{"href":71,"dataGaName":499,"dataGaLocation":477},"devsecops platform",[501],{"title":204,"links":502},[503,507,512],{"text":504,"config":505},"Tarife anzeigen",{"href":206,"dataGaName":506,"dataGaLocation":477},"view plans",{"text":508,"config":509},"Vorteile von Premium",{"href":510,"dataGaName":511,"dataGaLocation":477},"/de-de/pricing/premium/","why premium",{"text":513,"config":514},"Vorteile von Ultimate",{"href":515,"dataGaName":516,"dataGaLocation":477},"/de-de/pricing/ultimate/","why ultimate",{"title":518,"links":519},"Lösungen",[520,525,528,530,535,540,544,547,550,555,557,559,562,567],{"text":521,"config":522},"Digitale Transformation",{"href":523,"dataGaName":524,"dataGaLocation":477},"/de-de/topics/digital-transformation/","digital transformation",{"text":526,"config":527},"Sicherheit und Compliance",{"href":146,"dataGaName":153,"dataGaLocation":477},{"text":138,"config":529},{"href":121,"dataGaName":122,"dataGaLocation":477},{"text":531,"config":532},"Agile Entwicklung",{"href":533,"dataGaName":534,"dataGaLocation":477},"/de-de/solutions/agile-delivery/","agile delivery",{"text":536,"config":537},"Cloud-Transformation",{"href":538,"dataGaName":539,"dataGaLocation":477},"/de-de/topics/cloud-native/","cloud transformation",{"text":541,"config":542},"SCM",{"href":135,"dataGaName":543,"dataGaLocation":477},"source code management",{"text":125,"config":545},{"href":127,"dataGaName":546,"dataGaLocation":477},"continuous integration & delivery",{"text":176,"config":548},{"href":178,"dataGaName":549,"dataGaLocation":477},"value stream management",{"text":551,"config":552},"GitOps",{"href":553,"dataGaName":554,"dataGaLocation":477},"/de-de/solutions/gitops/","gitops",{"text":189,"config":556},{"href":191,"dataGaName":192,"dataGaLocation":477},{"text":194,"config":558},{"href":196,"dataGaName":197,"dataGaLocation":477},{"text":560,"config":561},"Öffentlicher Sektor",{"href":201,"dataGaName":202,"dataGaLocation":477},{"text":563,"config":564},"Bildungswesen",{"href":565,"dataGaName":566,"dataGaLocation":477},"/de-de/solutions/education/","education",{"text":568,"config":569},"Finanzdienstleistungen",{"href":570,"dataGaName":571,"dataGaLocation":477},"/de-de/solutions/finance/","financial services",{"title":209,"links":573},[574,576,578,580,583,585,587,589,591,593,595,597,599],{"text":221,"config":575},{"href":223,"dataGaName":224,"dataGaLocation":477},{"text":226,"config":577},{"href":228,"dataGaName":229,"dataGaLocation":477},{"text":231,"config":579},{"href":233,"dataGaName":234,"dataGaLocation":477},{"text":236,"config":581},{"href":238,"dataGaName":582,"dataGaLocation":477},"docs",{"text":259,"config":584},{"href":261,"dataGaName":5,"dataGaLocation":477},{"text":254,"config":586},{"href":256,"dataGaName":257,"dataGaLocation":477},{"text":263,"config":588},{"href":265,"dataGaName":266,"dataGaLocation":477},{"text":276,"config":590},{"href":278,"dataGaName":279,"dataGaLocation":477},{"text":268,"config":592},{"href":270,"dataGaName":271,"dataGaLocation":477},{"text":281,"config":594},{"href":283,"dataGaName":284,"dataGaLocation":477},{"text":286,"config":596},{"href":288,"dataGaName":289,"dataGaLocation":477},{"text":291,"config":598},{"href":293,"dataGaName":294,"dataGaLocation":477},{"text":296,"config":600},{"href":298,"dataGaName":299,"dataGaLocation":477},{"title":314,"links":602},[603,605,607,609,611,613,615,619,624,626,628,630],{"text":321,"config":604},{"href":323,"dataGaName":316,"dataGaLocation":477},{"text":326,"config":606},{"href":328,"dataGaName":329,"dataGaLocation":477},{"text":334,"config":608},{"href":336,"dataGaName":337,"dataGaLocation":477},{"text":339,"config":610},{"href":341,"dataGaName":342,"dataGaLocation":477},{"text":344,"config":612},{"href":346,"dataGaName":347,"dataGaLocation":477},{"text":349,"config":614},{"href":351,"dataGaName":352,"dataGaLocation":477},{"text":616,"config":617},"Sustainability",{"href":618,"dataGaName":616,"dataGaLocation":477},"/sustainability/",{"text":620,"config":621},"Vielfalt, Inklusion und Zugehörigkeit",{"href":622,"dataGaName":623,"dataGaLocation":477},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":625},{"href":356,"dataGaName":357,"dataGaLocation":477},{"text":364,"config":627},{"href":366,"dataGaName":367,"dataGaLocation":477},{"text":369,"config":629},{"href":371,"dataGaName":372,"dataGaLocation":477},{"text":631,"config":632},"Transparenzerklärung zu moderner Sklaverei",{"href":633,"dataGaName":634,"dataGaLocation":477},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":636,"links":637},"Nimm Kontakt auf",[638,641,643,645,650,655,660],{"text":639,"config":640},"Sprich mit einem Experten/einer Expertin",{"href":53,"dataGaName":54,"dataGaLocation":477},{"text":383,"config":642},{"href":385,"dataGaName":386,"dataGaLocation":477},{"text":388,"config":644},{"href":390,"dataGaName":391,"dataGaLocation":477},{"text":646,"config":647},"Status",{"href":648,"dataGaName":649,"dataGaLocation":477},"https://status.gitlab.com/","status",{"text":651,"config":652},"Nutzungsbedingungen",{"href":653,"dataGaName":654,"dataGaLocation":477},"/terms/","terms of use",{"text":656,"config":657},"Datenschutzerklärung",{"href":658,"dataGaName":659,"dataGaLocation":477},"/de-de/privacy/","privacy statement",{"text":661,"config":662},"Cookie-Einstellungen",{"dataGaName":663,"dataGaLocation":477,"id":664,"isOneTrustButton":107},"cookie preferences","ot-sdk-btn",{"items":666},[667,669,671],{"text":651,"config":668},{"href":653,"dataGaName":654,"dataGaLocation":477},{"text":656,"config":670},{"href":658,"dataGaName":659,"dataGaLocation":477},{"text":661,"config":672},{"dataGaName":663,"dataGaLocation":477,"id":664,"isOneTrustButton":107},"content:shared:de-de:main-footer.yml","Main Footer","shared/de-de/main-footer.yml","shared/de-de/main-footer",[678],{"_path":679,"_dir":680,"_draft":6,"_partial":6,"_locale":7,"content":681,"config":685,"_id":687,"_type":30,"title":18,"_source":32,"_file":688,"_stem":689,"_extension":35},"/en-us/blog/authors/kushal-pandya","authors",{"name":18,"config":682},{"headshot":683,"ctfId":684},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659454/Blog/Author%20Headshots/kushalpandya-headshot.png","kushalpandya",{"template":686},"BlogAuthor","content:en-us:blog:authors:kushal-pandya.yml","en-us/blog/authors/kushal-pandya.yml","en-us/blog/authors/kushal-pandya",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":691,"content":692,"config":695,"_id":29,"_type":30,"title":31,"_source":32,"_file":33,"_stem":34,"_extension":35},{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},{"title":9,"description":10,"authors":693,"heroImage":11,"date":19,"body":20,"category":21,"tags":694,"updatedDate":25},[18],[23,24],{"slug":27,"featured":6,"template":28},{"_path":697,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"header":698,"eyebrow":699,"blurb":700,"button":701,"secondaryButton":705,"_id":707,"_type":30,"title":708,"_source":32,"_file":709,"_stem":710,"_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":702},{"href":703,"dataGaName":49,"dataGaLocation":704},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":51,"config":706},{"href":53,"dataGaName":54,"dataGaLocation":704},"content:shared:de-de:next-steps.yml","Next Steps","shared/de-de/next-steps.yml","shared/de-de/next-steps",1761814384375]