{"id":63266,"date":"2023-06-29T11:20:16","date_gmt":"2023-06-29T10:20:16","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=63266&#038;preview=true&#038;preview_id=63266"},"modified":"2023-07-27T10:27:44","modified_gmt":"2023-07-27T09:27:44","slug":"git-merge","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/git-merge\/","title":{"rendered":"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt"},"content":{"rendered":"<p>Bei der Arbeit, die in einem Entwicklungsprojekt stattfindet, ist <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> ein Geschenk des Himmels. Wenn du jedoch viele Leute auf der Tanzfl\u00e4che hast, werden sich ein oder zwei von ihnen gegenseitig auf die F\u00fc\u00dfe treten. F\u00fcr dein Projekt bedeutet das, dass zwei Entwickler an derselben Code-Suite arbeiten und beide einen Commit machen. In solchen Situationen musst du einige Git-Merge-Strategien anwenden, um den Konflikt zu l\u00f6sen.<\/p>\n<p>Ein Git Merge kann ganz einfach sein, aber es gibt auch viele andere Situationen, in denen du einen fortgeschrittenen Ansatz brauchst. In diesem Fall musst du Strategien wie rekursives Zusammenf\u00fchren, Drei-Wege-Merge und viele mehr anwenden. Es kann sogar sein, dass du einen Git-Merge irgendwann wieder r\u00fcckg\u00e4ngig machen musst.<\/p>\n<p>In diesem Leitfaden werden wir einige komplexe Git-Merge-Techniken besprechen, die du in deinen Werkzeugg\u00fcrtel aufnehmen kannst. Lass uns gleich mit den guten Dingen anfangen!! <div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Eine Einf\u00fchrung in die Git Merge-Strategien<\/h2>\n<p>Das Grundkonzept eines Merge ist einfach: Du f\u00fcgst zwei Zweige zusammen, um aus mehreren Commits einen zu machen. Es gibt jedoch eine Reihe von Techniken, die du anwenden kannst, um sicherzustellen, dass du den richtigen Code festlegst und zusammenf\u00fchrst.<\/p>\n<p>Wir werden uns ein paar wichtige Strategien ansehen, die du verstehen musst. Sie stehen nicht in einer bestimmten Reihenfolge, und irgendwann in deiner <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-man-webentwickler-wird\/\">Entwickler-Karriere<\/a> wirst du sie alle brauchen. Au\u00dferdem brauchst du ein solides Verst\u00e4ndnis der grundlegenden Git-Konzepte wie Zeiger, Zweige und Commits.<\/p>\n<h3>Der Unterschied zwischen Zwei-Wege- und Drei-Wege-Merges<\/h3>\n<p>Es ist hilfreich, den Unterschied zwischen einem Zwei-Wege-Merge und dem Drei-Wege-Merge zu kennen. Die meisten der Merge-Strategien, die wir im Folgenden behandeln, beziehen sich auf Drei-Wege-Situationen. Tats\u00e4chlich ist es einfacher, dar\u00fcber zu sprechen, was ein Drei-Wege-Merge ist. Nimm das folgende Beispiel:<\/p>\n<ul>\n<li>Du hast einen <strong>Hauptzweig<\/strong> mit mehreren Commits und einen Funktionszweig, der ebenfalls Commits hat.<\/li>\n<li>Wenn der <strong>Hauptzweig<\/strong> nun weitere Commits vornimmt, laufen beide Zweige auseinander.<\/li>\n<li>Laienhaft ausgedr\u00fcckt: Sowohl der <strong>Haupt-<\/strong> als auch der Funktionszweig haben Commits, die der andere nicht hat. Wenn du diese in beide Richtungen zusammenf\u00fchrst, verlierst du einen Commit (wahrscheinlich auf <strong>main<\/strong>).<\/li>\n<li>Stattdessen erstellt Git einen neuen Merge-Commit aus dem aktuellen <strong>Haupt-<\/strong> und Feature-Zweig.<\/li>\n<\/ul>\n<p>Kurz gesagt: Git betrachtet drei verschiedene Snapshots, um \u00c4nderungen zusammenzuf\u00fchren: den Kopf des <strong>Hauptzweigs<\/strong>, den Kopf des Funktionszweigs und den gemeinsamen Vorg\u00e4nger. Dies ist der letzte gemeinsame Commit f\u00fcr den <strong>Haupt-<\/strong> und den Funktionszweig.<\/p>\n<p>In der Praxis wirst du dir keine Gedanken dar\u00fcber machen m\u00fcssen, ob eine bestimmte Zusammenf\u00fchrungsstrategie zwei- oder dreifach ist. In vielen F\u00e4llen musst du eine Strategie unabh\u00e4ngig davon verwenden. In jedem Fall ist es hilfreich zu wissen, wie Git &#8222;denkt&#8220;, wenn es um das Zusammenf\u00fchren von <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#import-a-repository-to-github\" rel=\"noopener\">Zweigen und Repos<\/a> geht.<\/p>\n<h3>Fast-Forward Merging<\/h3>\n<p>Bei der ersten Strategie musst du vielleicht gar nichts tun, um sie auszuf\u00fchren. Ein Fast-Forward-Merge verschiebt den Zeiger auf den letzten Commit auf <strong>Main <\/strong>, ohne einen zus\u00e4tzlichen Commit zu erstellen (was verwirrend sein kann).<\/p>\n<p>Die Technik beginnt mit einem Hauptzweig, der Commits haben kann oder auch nicht. In diesem Fall er\u00f6ffnest du einen neuen Zweig, arbeitest an dem Code und machst Commits. An diesem Punkt musst du die \u00c4nderungen auch wieder mit dem <strong>Hauptzweig<\/strong> zusammenf\u00fchren. Ein Fast-Forward-Merge hat nur eine Voraussetzung: Du musst sie erf\u00fcllen:<\/p>\n<ul>\n<li style=\"font-weight: 400\">Du musst sicherstellen, dass keine anderen \u00c4nderungen an der <strong>Hauptversion<\/strong> vorgenommen werden, w\u00e4hrend du an deinem neuen Zweig arbeitest.<\/li>\n<\/ul>\n<p>Das wird nicht immer m\u00f6glich sein, vor allem wenn du in einem gro\u00dfen Team arbeitest. Wenn du jedoch deine Commits mit einem aktuellen Hauptzweig zusammenf\u00fchrst, der keine eigenen Commits hat, wird ein Fast-Forward-Merge durchgef\u00fchrt. Du kannst dies auf verschiedene Arten tun:<\/p>\n<pre><code class=\"language-bash\">git merge &lt;branch&gt;\n\ngit merge --ff-only\n<\/code><\/pre>\n<p>In vielen F\u00e4llen musst du nicht angeben, dass du einen Fast-Forward-Merge durchf\u00fchren willst. Diese Art des Merge kommt bei <a href=\"https:\/\/kinsta.com\/de\/blog\/git-fuer-die-webentwicklung\/\" rel=\"noopener\">Einzelprojekten<\/a> oder bei Projekten mit kleinen Teams vor. In einer schnelllebigen Umgebung ist dies ein seltener Merge. Andere Zusammenf\u00fchrungen sind daher h\u00e4ufiger.<\/p>\n<h3>Recursive Merging<\/h3>\n<p>Ein rekursiver Merge ist oft der Standard, da er h\u00e4ufiger vorkommt als andere Arten von Zusammenschl\u00fcssen. Bei einem rekursiven Merge machst du Commits auf einem Zweig, aber weitere Commits finden auch auf dem <strong>Main<\/strong> statt.<\/p>\n<p>Wenn es an der Zeit ist, zu mergen, rekursiert Git \u00fcber den Zweig, um den endg\u00fcltigen Commit zu machen. Das bedeutet, dass ein Merge Commit zwei Elternteile hat, sobald du ihn abgeschlossen hast.<\/p>\n<p>Wie bei einem Fast-Forward-Merge musst du normalerweise keinen rekursiven Merge angeben. Du kannst jedoch mit den folgenden Befehlen und Flags daf\u00fcr sorgen, dass Git sich nicht f\u00fcr einen Fast-Forward-Merge entscheidet:<\/p>\n<pre><code class=\"language-bash\">git merge --no-ff\n\ngit merge -s recursive &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>Die zweite Zeile verwendet die Option <code>-s<\/code> strategy und die explizite Benennung, um einen Merge auszuf\u00fchren. Im Gegensatz zu einem Fast-Forward-Merge <em>wird<\/em> bei einem rekursiven Merge ein eigener Merge-Commit erstellt. F\u00fcr bidirektionale Zusammenf\u00fchrungen ist eine rekursive Strategie solide und funktioniert gut.<\/p>\n<h3 id=\"ours-and-theirs\" class=\"has-anchor-hash\">Ours and Theirs<\/h3>\n<p>Eine h\u00e4ufige Situation w\u00e4hrend der Entwicklung ist, dass du eine neue Funktion in deinem Projekt erstellst, die letztendlich kein gr\u00fcnes Licht bekommt. In vielen F\u00e4llen musst du eine Menge Code zusammenf\u00fchren, der ebenfalls voneinander abh\u00e4ngig ist. Ein &#8222;Ours&#8220;-Merge ist die beste M\u00f6glichkeit, diese Konflikte zu l\u00f6sen.<\/p>\n<p>Diese Art des Zusammenf\u00fchrens kann so viele Zweige wie n\u00f6tig verarbeiten und ignoriert alle \u00c4nderungen in den anderen Zweigen. Sie ist ideal, wenn du alte Funktionen oder unerw\u00fcnschte Entwicklungen aus dem Weg r\u00e4umen willst. Hier ist der Befehl, den du brauchst:<\/p>\n<pre><code class=\"language-bash\">git merge -s ours &lt;branch1&gt; &lt;branch2&gt;<\/code><\/pre>\n<p>Ein &#8222;Ours&#8220;-Merge bedeutet im Wesentlichen, dass der aktuelle Zweig den Code <em>de jure<\/em> enth\u00e4lt. Das ist vergleichbar mit den &#8222;Theirs&#8220;-Zusammenf\u00fchrungen, bei denen der andere Zweig als richtig angesehen wird. Allerdings musst du hier eine andere Strategieoption angeben:<\/p>\n<pre><code class=\"language-bash\">git merge -X theirs &lt;branch2&gt;\n<\/code><\/pre>\n<p>Die Verwendung von &#8222;Ours&#8220;- und &#8222;Theirs&#8220;-Merges kann verwirrend sein, aber in der Regel ist es sicher, sich an die typischen Anwendungsf\u00e4lle zu halten (n\u00e4mlich alles im aktuellen Zweig zu behalten und den Rest zu verwerfen).<\/p>\n<h3>Octopus<\/h3>\n<p>Der Umgang mit mehreren K\u00f6pfen &#8211; d.h. das Zusammenf\u00fchren von mehr als einem Zweig in einen anderen &#8211; kann ein kniffliges Szenario f\u00fcr einen Git Merge sein. Man <em>k\u00f6nnte<\/em> sagen, man braucht mehr als zwei H\u00e4nde, um die Konflikte zu l\u00f6sen. Das ist perfekt f\u00fcr einen Octopus Merge.<\/p>\n<p>Oktopus-Zusammenf\u00fchrungen sind das genaue Gegenteil von &#8222;Ours&#8220;- und &#8222;Theirs&#8220;-Zusammenf\u00fchrungen. Der typische Anwendungsfall ist, dass du mehrere Commits f\u00fcr \u00e4hnliche Funktionen einbeziehen und zu einem einzigen zusammenf\u00fchren willst. So \u00fcbergibst du sie:<\/p>\n<pre><code class=\"language-bash\">git merge -s octopus &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>Git lehnt einen Octopus-Merge jedoch ab, wenn du im Nachhinein eine manuelle Aufl\u00f6sung vornehmen musst. Bei automatischen Aufl\u00f6sungen ist ein Octopus Merge der Standard, wenn du mehrere Zweige zu einem einzigen zusammenf\u00fchren musst.<\/p>\n<h3>Resolve<\/h3>\n<p>Der Resolve-Merge ist eine der sichersten Methoden zum Zusammenf\u00fchren von Commits und eignet sich hervorragend, wenn du in einer Situation bist, in der es zu <a href=\"https:\/\/tonyg.github.io\/revctrl.org\/CrissCrossMerge.html\" target=\"_blank\" rel=\"noopener noreferrer\">kreuzweisen Zusammenf\u00fchrungen<\/a> kommt. Es ist auch eine schnell zu implementierende Aufl\u00f6sungsmethode. Du kannst diese Methode auch f\u00fcr komplexere Merge-Historien verwenden &#8211; aber nur f\u00fcr solche mit zwei K\u00f6pfen.<\/p>\n<pre><code class=\"language-bash\">git merge -s resolve &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>Da ein Resolve Merge einen Drei-Wege-Algorithmus verwendet, um sowohl mit dem aktuellen Zweig als auch mit dem Zweig, aus dem du die Daten ziehst, zu arbeiten, ist er vielleicht nicht so flexibel wie andere Merge-Methoden. Aber f\u00fcr die Aufgabe, die du brauchst, ist ein Resolve-Merge nahezu perfekt.<\/p>\n<h3>Subtree<\/h3>\n<p>Dieses Pendant zum rekursiven Zusammenf\u00fchren k\u00f6nnte dich verwirren. Wir werden versuchen, dies anhand eines anschaulichen Beispiels zu erkl\u00e4ren:<\/p>\n<ul>\n<li>Betrachte zun\u00e4chst zwei verschiedene B\u00e4ume &#8211; X und Y. Oft handelt es sich dabei um zwei Repos.<\/li>\n<li>Du m\u00f6chtest beide B\u00e4ume zu einem einzigen zusammenf\u00fchren.<\/li>\n<li>Wenn der Baum Y mit einem der Unterb\u00e4ume in X \u00fcbereinstimmt, wird der Baum Y so ge\u00e4ndert, dass er der Struktur von X entspricht.<\/li>\n<\/ul>\n<p>Das bedeutet, dass eine Teilbaum-Zusammenf\u00fchrung fantastisch ist, wenn du <a href=\"https:\/\/kinsta.com\/de\/blog\/monorepo-vs-multi-repo\/\" rel=\"noopener\">mehrere Repos<\/a> zu einem endg\u00fcltigen Artikel zusammenf\u00fchren willst. Er nimmt auch die notwendigen \u00c4nderungen am gemeinsamen &#8222;Vorg\u00e4ngerbaum&#8220; der beiden Zweige vor.<\/p>\n<pre><code class=\"language-bash\">git merge -s subtree &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>Kurz gesagt, ein Teilbaum-Zusammenschluss ist genau das Richtige f\u00fcr dich, wenn du zwei Repositories zusammenf\u00fchren musst. Vielleicht f\u00e4llt es dir sogar schwer zu verstehen, welche Zusammenf\u00fchrungsstrategie die richtige f\u00fcr dich ist. Sp\u00e4ter werden wir einige Tools besprechen, die dir dabei helfen k\u00f6nnen.<\/p>\n<p>Davor gibt es einige fortgeschrittene Merge-Konflikte, die du l\u00f6sen musst.<\/p>\n<h2>Wie man mit komplexeren Git-Merge-Konflikten umgeht<\/h2>\n<p>Beim Zusammenf\u00fchren von Zweigen in Git geht es eher darum, Konflikte zu verwalten und zu l\u00f6sen. Je gr\u00f6\u00dfer <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-agentur\/\" rel=\"noopener\">dein Team<\/a> und dein Projekt sind, desto gr\u00f6\u00dfer ist die Wahrscheinlichkeit von Konflikten. Einige davon k\u00f6nnen sehr komplex und schwierig zu l\u00f6sen sein.<\/p>\n<p>Da Konflikte Zeit, Geld und Ressourcen verschlingen k\u00f6nnen, musst du herausfinden, wie du sie schnell im Keim ersticken kannst. In den meisten F\u00e4llen arbeiten zwei Entwickler\/innen an demselben Code, und beide entscheiden sich f\u00fcr einen Commit.<\/p>\n<p>Das kann dazu f\u00fchren, dass du den Merge wegen ausstehender \u00c4nderungen gar nicht starten kannst oder dass w\u00e4hrend des Merges ein Fehler auftritt, der einen manuellen Eingriff erfordert. Sobald dein Arbeitsverzeichnis &#8222;sauber&#8220; ist, kannst du beginnen. In vielen F\u00e4llen wird Git dich \u00fcber einen Konflikt informieren, sobald du mit dem Zusammenf\u00fchren beginnst:<\/p>\n<figure id=\"attachment_155619\" aria-describedby=\"caption-attachment-155619\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155619 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-conflict.png\" alt=\"Ein Terminal-Fenster mit Git-Befehlen zum Anzeigen aller Zweige und zum Zusammenf\u00fchren von \u00c4nderungen. Ein Fehler wird als Merge-Konflikt angezeigt, mit der Anweisung, die Ergebnisse der Konflikte zu beheben und zu committen.\" width=\"1000\" height=\"412\"><figcaption id=\"caption-attachment-155619\" class=\"wp-caption-text\">Ein Terminalfenster, das einen Merge-Konflikt in Git anzeigt<\/figcaption><\/figure>\n<p>F\u00fcr weitere Informationen kannst du eine <code>git status<\/code> ausf\u00fchren und die Details einsehen:<\/p>\n<figure id=\"attachment_155623\" aria-describedby=\"caption-attachment-155623\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155623 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-status.png\" alt=\"Ein Terminalfenster, das das Ergebnis eines Git-Status-Befehls anzeigt. Es zeigt eine Liste von Dateien in gr\u00fcn mit Anweisungen zum Aufl\u00f6sen von nicht eingebundenen Pfaden.\" width=\"1000\" height=\"342\"><figcaption id=\"caption-attachment-155623\" class=\"wp-caption-text\">Ein Terminal-Fenster, das die Ergebnisse eines Git-Status-Befehls anzeigt<\/figcaption><\/figure>\n<p>Von hier aus kannst du damit beginnen, die verschiedenen Dateien zu bearbeiten, die den Konflikt verursachen. Einige der Werkzeuge und Techniken, die wir im Folgenden besprechen, werden dir dabei helfen.<\/p>\n<h3>Abbruch und Zur\u00fccksetzen von Zusammenf\u00fchrungen<\/h3>\n<p>Manchmal musst du den Merge ganz abbrechen und von vorne anfangen. Die beiden genannten Befehle eignen sich f\u00fcr Situationen, in denen du noch nicht wei\u00dft, wie du mit einem Konflikt umgehen sollst.<\/p>\n<p>Mit den folgenden Befehlen kannst du einen laufenden Zusammenf\u00fchrungsprozess abbrechen oder zur\u00fccksetzen:<\/p>\n<pre><code class=\"language-bash\">git merge --abort\n\ngit reset\n<\/code><\/pre>\n<p>Die beiden Befehle sind \u00e4hnlich, aber du verwendest sie unter verschiedenen Umst\u00e4nden. Wenn du zum Beispiel einen Merge abbrichst, wird der Zweig einfach auf den Zustand vor dem Zusammenschluss zur\u00fcckgesetzt. In manchen F\u00e4llen funktioniert das aber nicht. Wenn dein Arbeitsverzeichnis zum Beispiel nicht \u00fcbertragene und nicht gespeicherte \u00c4nderungen enth\u00e4lt, kannst du den Abbruch nicht durchf\u00fchren.<\/p>\n<p>Das Zur\u00fccksetzen eines Merge bedeutet jedoch, dass du die Dateien in einen bekannten &#8222;guten&#8220; Zustand zur\u00fcckversetzt. Letzteres solltest du in Betracht ziehen, wenn Git den Merge nicht starten kann. Beachte, dass dieser Befehl <a href=\"https:\/\/kinsta.com\/de\/blog\/git-delete-lokaler-zweig\/\" rel=\"noopener\">alle \u00c4nderungen l\u00f6scht<\/a>, die du nicht \u00fcbertr\u00e4gst, was bedeutet, dass dieser Befehl eher eine bewusste Handlung ist, die Vorsicht erfordert.<\/p>\n<h3>\u00dcberpr\u00fcfen von Konflikten<\/h3>\n<p>Die meisten Konflikte beim Mergen lassen sich leicht feststellen und l\u00f6sen. In manchen F\u00e4llen musst du jedoch tiefer graben, um herauszufinden, warum ein Konflikt auftritt und wie du ihn l\u00f6sen kannst.<\/p>\n<p>Mit einem Checkout kannst du nach einem <code>git merge<\/code> mehr Kontext erhalten:<\/p>\n<pre><code class=\"language-bash\">git checkout --conflict=diff3 &lt;filename&gt;\n<\/code><\/pre>\n<p>Dabei wird die typische Navigation, die ein Checkout bietet, verwendet und ein Vergleich zwischen den beiden Dateien erstellt, die im Merge-Konflikt angezeigt werden:<\/p>\n<figure id=\"attachment_155618\" aria-describedby=\"caption-attachment-155618\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155618 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/checkout-merge-conflict.png\" alt=\"Ein Code-Editor, der die Ergebnisse des Befehls git checkout --conflict anzeigt. Er hebt Bereiche des Codes rot hervor und verwendet Symbole, um zu kennzeichnen, wo es eine \u00c4nderung gibt, die einen Commit verhindert.\" width=\"1000\" height=\"486\"><figcaption id=\"caption-attachment-155618\" class=\"wp-caption-text\">Einen Konflikt innerhalb einer bestimmten Projektdatei \u00fcberpr\u00fcfen<\/figcaption><\/figure>\n<p>Technisch gesehen wird dabei die Datei erneut \u00fcberpr\u00fcft und die Konfliktmarkierungen werden ersetzt. Das kannst du im Laufe einer L\u00f6sung ein paar Mal machen. Wenn du hier das Argument <code>diff3 <\/code>angibst, erh\u00e4ltst du die Basisversion und die Alternativen in &#8222;ours&#8220; und &#8222;theirs&#8220; Versionen.<\/p>\n<p>Beachte, dass das Standardargument <code>merge<\/code> ist, welches du nicht angeben musst, es sei denn, du \u00e4nderst den Stil des Zusammenf\u00fchrungskonflikts abweichend vom Standard.<\/p>\n<h3>Negative Leerzeichen ignorieren<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/best-practices-fur-webdesign\/\" rel=\"noopener\">Negative Leerzeichen<\/a> und ihre Verwendung sind ein h\u00e4ufiger Diskussionspunkt. Einige <a href=\"https:\/\/kinsta.com\/de\/blog\/beste-programmiersprache-lernen-sollte\/\" rel=\"noopener\">Programmiersprachen<\/a> verwenden unterschiedliche Arten von Abst\u00e4nden und sogar einzelne Entwickler verwenden unterschiedliche Formatierungen.<\/p>\n<p>Leerzeichen und Tabulatoren sind ein Schlachtfeld, an dem wir uns nicht beteiligen werden. Wenn du jedoch Situationen hast, in denen sich die Formatierung je nach Datei und Programmierpraxis \u00e4ndert, k\u00f6nntest du auf dieses Problem beim Git Merge sto\u00dfen.<\/p>\n<p>Wenn du dir den Konflikt ansiehst, erkennst du, dass der Zusammenschluss deshalb fehlgeschlagen ist, weil Zeilen entfernt und hinzugef\u00fcgt wurden:<\/p>\n<figure id=\"attachment_155627\" aria-describedby=\"caption-attachment-155627\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155627 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/negative-space-conflict.png\" alt=\"Ein Code-Editor, der die Unterschiede zwischen zwei Dateien mit Merge-Konflikten anzeigt. Jeder Bereich, in dem Unterschiede bestehen, wird mit Symbolen gekennzeichnet und rot hervorgehoben.\" width=\"1000\" height=\"692\"><figcaption id=\"caption-attachment-155627\" class=\"wp-caption-text\">Eine Datei, die die Konfliktunterschiede in einem Editor zeigt<\/figcaption><\/figure>\n<p>Das liegt daran, dass Git sich diese Zeilen ansieht und das negative Leerzeichen als eine \u00c4nderung ansieht.<\/p>\n<p>Du kannst dem Befehl <code>git merge<\/code> jedoch bestimmte Argumente hinzuf\u00fcgen, die negative Leerzeichen in den betreffenden Dateien \u00fcbersehen:<\/p>\n<pre><code class=\"language-bash\">git merge -Xignore-all-space\n\ngit merge -Xignore-space-change\n<\/code><\/pre>\n<p>Diese beiden Argumente scheinen zwar \u00e4hnlich zu sein, aber sie unterscheiden sich deutlich. Wenn du dich daf\u00fcr entscheidest, alle negativen Leerzeichen zu ignorieren, wird Git dies tun. Das ist zwar ein pauschaler Ansatz, aber im Gegensatz dazu z\u00e4hlt <code>-Xignore-space-change<\/code> nur Sequenzen mit einem oder mehreren negativen Leerzeichen als gleichwertig. Einzelne Leerzeichen am Ende von Zeilen werden also ignoriert.<\/p>\n<p>Zur zus\u00e4tzlichen Sicherheit kannst du den Merge auch mit dem Befehl <code>--no-commit<\/code> \u00fcberpr\u00fcfen, um sicherzugehen, dass du negative Leerzeichen richtig ignorierst und z\u00e4hlst.<\/p>\n<h3>Logs zusammenf\u00fchren<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/docs\/devkinsta\/logging\/\" rel=\"noopener\">Logging<\/a> ist f\u00fcr fast jede Software, die Daten weitergibt, wichtig. Bei Git kannst du das Protokoll nutzen, um mehr Details \u00fcber einen Merge-Konflikt zu erfahren. Du kannst diese Informationen \u00fcber <code>git log<\/code> abrufen:<\/p>\n<figure id=\"attachment_155621\" aria-describedby=\"caption-attachment-155621\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155621 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-log-file.png\" alt=\"Ein Terminalfenster, das das Git-Protokoll f\u00fcr ein Repository anzeigt. Es gibt zwei Commits mit gelber \u00dcberschrift sowie Details zu Autor, Datum und Commit-Nachricht.\" width=\"1000\" height=\"537\"><figcaption id=\"caption-attachment-155621\" class=\"wp-caption-text\">Ausf\u00fchren und Anzeigen des Git-Logs im Terminal<\/figcaption><\/figure>\n<p>Es ist im Wesentlichen eine Textdatei, die jede Aktion innerhalb eines Repos aufzeichnet. Du kannst jedoch weitere Argumente hinzuf\u00fcgen, um die Ansicht zu verfeinern und nur die Commits zu sehen, die du m\u00f6chtest:<\/p>\n<pre><code class=\"language-bash\">git log --oneline --left-right &lt;branch1&gt;...&lt;branch2&gt;\n<\/code><\/pre>\n<p>Hier wird ein <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Git-Tools-Revision-Selection#_triple_dot\" target=\"_blank\" rel=\"noopener noreferrer\">&#8222;Triple Dot&#8220;<\/a> verwendet, um eine Liste der Commits zu erstellen, die bei einem Merge in zwei Zweigen involviert sind. Es werden alle Commits herausgefiltert, die beide Zweige gemeinsam haben, so dass eine Auswahl von Commits \u00fcbrig bleibt, die du weiter untersuchen kannst.<\/p>\n<p>Du kannst auch <code>git log --oneline --left-right --merge<\/code> verwenden, um nur die Commits auf beiden Seiten eines Merges anzuzeigen, die eine konfliktbehaftete Datei &#8222;ber\u00fchren&#8220;. Die Option <code>-p<\/code> zeigt dir die genauen \u00c4nderungen f\u00fcr einen bestimmten &#8222;Diff&#8220; an, allerdings nur f\u00fcr Commits, die nicht zusammengef\u00fchrt wurden. Es gibt eine Umgehungsl\u00f6sung, die wir im Folgenden beschreiben.<\/p>\n<h3>Das kombinierte Diff-Format verwenden, um einen Git Merge-Konflikt zu untersuchen<\/h3>\n<p>Du kannst die Ansicht, die du mit <code>git log<\/code> erh\u00e4ltst, weiter nutzen, um Merge-Konflikte zu untersuchen. In der Regel wird Git den Code zusammenf\u00fchren und alles, was erfolgreich ist, einstellen. Dadurch bleiben nur die konfliktbehafteten Zeilen \u00fcbrig, die du mit dem Befehl <code>git diff<\/code> einsehen kannst:<\/p>\n<figure id=\"attachment_155620\" aria-describedby=\"caption-attachment-155620\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155620 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-diff.png\" alt=\"Ein Terminalfenster, das die Ausgabe eines git diff-Befehls anzeigt. Es zeigt Details zu den \u00c4nderungen in gr\u00fcnem und rotem Text sowie weitere Details zu den Unterschieden mit Dateinamen innerhalb des Repositorys.\" width=\"1000\" height=\"714\"><figcaption id=\"caption-attachment-155620\" class=\"wp-caption-text\">Einen git diff-Befehl im Terminal ausf\u00fchren<\/figcaption><\/figure>\n<p>Dieses &#8222;kombinierte Diff&#8220;-Format f\u00fcgt zwei zus\u00e4tzliche Spalten mit Informationen hinzu. Die erste zeigt dir, ob sich eine Zeile zwischen deinem (&#8222;Ours&#8220;-)Zweig und der Arbeitskopie unterscheidet; die zweite gibt dir die gleichen Informationen f\u00fcr den &#8222;Theirs&#8220;-Zweig.<\/p>\n<p>Ein Pluszeichen bedeutet, dass eine Zeile in der Arbeitskopie hinzugef\u00fcgt wurde, aber nicht in dieser Seite des Zusammenschlusses, und ein Minuszeichen bedeutet, dass die Zeile entfernt wurde.<\/p>\n<p>Du kannst dieses kombinierte Diff-Format auch im Git-Protokoll sehen, indem du ein paar Befehle verwendest:<\/p>\n<pre><code class=\"language-bash\">git show\n\ngit log --cc -p\n<\/code><\/pre>\n<p>Der erste ist ein Befehl, den du bei einer Zusammenf\u00fchrungs\u00fcbergabe verwendest, um deren Verlauf zu sehen. Der zweite Befehl nutzt die Funktionalit\u00e4t von <code>-p<\/code>, um die \u00c4nderungen an einer Nicht-Merge-Commit neben dem kombinierten Diff-Format anzuzeigen.<\/p>\n<h2>Wie man einen Git Merge r\u00fcckg\u00e4ngig macht<\/h2>\n<p>Es k\u00f6nnen Fehler passieren, und du kannst Zusammenf\u00fchrungen durchf\u00fchren, die du wieder r\u00fcckg\u00e4ngig machen musst. In manchen F\u00e4llen kannst du einfach den letzten Commit mit <code>git commit --amend<\/code> \u00e4ndern. Dadurch wird der Editor ge\u00f6ffnet und du kannst die letzte Commit-Nachricht \u00e4ndern.<\/p>\n<p>Komplexere Merge-Konflikte und die daraus resultierenden \u00c4nderungen <em>kannst<\/em> du zwar r\u00fcckg\u00e4ngig machen, aber das kann schwierig sein, weil Commits oft dauerhaft sind.<\/p>\n<p>Deshalb musst du eine Reihe von Schritten befolgen:<\/p>\n<ul>\n<li>Zuerst musst du Commits \u00fcberpr\u00fcfen und Verweise auf die ben\u00f6tigten Merges finden.<\/li>\n<li>Als N\u00e4chstes checkst du Zweige aus, um die Commit-Historie zu \u00fcberpr\u00fcfen.<\/li>\n<li>Sobald du die Zweige und Commits kennst, die du brauchst, gibt es spezielle Git-Befehle, die auf deine gew\u00fcnschte Aktion abgestimmt sind.<\/li>\n<\/ul>\n<p>Schauen wir uns diese genauer an und beginnen mit dem Review-Prozess. Danach zeigen wir dir, wie du einen Git Merge schnell wieder r\u00fcckg\u00e4ngig machen kannst, und gehen dann auf spezielle Befehle f\u00fcr fortgeschrittene Anwendungsf\u00e4lle ein.<\/p>\n<h3>Commits \u00fcberpr\u00fcfen<\/h3>\n<p>Der Befehl <code>git log --oneline<\/code> ist ideal, wenn du die Revisions-IDs und die Commit-Nachricht f\u00fcr den aktuellen Zweig sehen willst:<\/p>\n<figure id=\"attachment_155622\" aria-describedby=\"caption-attachment-155622\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155622 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-log-oneline.png\" alt=\"Ein Teil eines Terminalfensters, der die Ausgabe eines einzeiligen Git diff-Befehls anzeigt. Er zeigt eine minimale Anzahl von Details an: den Hash des Commits, die Zweige und die Nachricht f\u00fcr jeden, bevor die Terminal-Eingabeaufforderung angezeigt wird.\" width=\"1000\" height=\"356\"><figcaption id=\"caption-attachment-155622\" class=\"wp-caption-text\">Einen einzeiligen git diff-Befehl im Terminal ausf\u00fchren<\/figcaption><\/figure>\n<p>Der Befehl <code>git log --branches=*<\/code> zeigt dir die gleichen Informationen, aber f\u00fcr alle Zweige. Unabh\u00e4ngig davon kannst du die Referenz-IDs zusammen mit einem <code>git checkout<\/code> verwenden, um einen &#8222;abgetrennten <code>HEAD<\/code>&#8220; Status zu erstellen. Das bedeutet, dass du aus technischer Sicht an keinem Zweig arbeitest und sobald du wieder zu einem etablierten Zweig wechselst, &#8222;verwaisst&#8220; du die \u00c4nderungen.<\/p>\n<p>So kannst du den Checkout fast als risikofreie Sandbox nutzen. Wenn du die \u00c4nderungen jedoch beibehalten willst, kannst du den Zweig auschecken und ihm mit <code>git checkout -b &lt;branch-name&gt;<\/code> <a href=\"https:\/\/kinsta.com\/de\/blog\/git-rename-zweig\/\" target=\"_blank\" rel=\"noopener noreferrer\">einen neuen Namen geben<\/a>. Das ist eine solide Methode, um eine Git-Zusammenf\u00fchrung r\u00fcckg\u00e4ngig zu machen, aber f\u00fcr fortgeschrittene Anwendungsf\u00e4lle gibt es noch weitere M\u00f6glichkeiten.<\/p>\n<h3>Git Reset verwenden<\/h3>\n<p>Viele deiner Merge-Konflikte k\u00f6nnten in einem lokalen Projektarchiv auftreten. In diesen F\u00e4llen ist <code>git reset<\/code> der richtige Befehl f\u00fcr dich. Dieser Befehl hat jedoch mehr Parameter und Argumente, die du beachten musst. Hier erf\u00e4hrst du, wie du den Befehl in der Praxis verwendest:<\/p>\n<pre><code class=\"language-bash\">git reset --hard &lt;reference&gt;\n<\/code><\/pre>\n<p>Der erste Teil davon &#8211; <code>git reset --hard<\/code> &#8211; durchl\u00e4uft drei Schritte:<\/p>\n<ul>\n<li style=\"font-weight: 400\">Er verschiebt den Referenzzweig an den Ort vor dem Merge-Commit.<\/li>\n<li style=\"font-weight: 400\">Durch den Hard-Reset sieht der &#8222;Index&#8220; (d.h. der n\u00e4chste vorgeschlagene Commit-Snapshot) wie der Referenzzweig aus.<\/li>\n<li style=\"font-weight: 400\">Er l\u00e4sst das Arbeitsverzeichnis wie den Index aussehen.<\/li>\n<\/ul>\n<p>Sobald du diesen Befehl aufrufst, werden sp\u00e4tere Commits aus der Commit-Historie entfernt und die Historie auf die referenzierte ID zur\u00fcckgesetzt. Das ist eine saubere Methode, um eine Git-Zusammenf\u00fchrung r\u00fcckg\u00e4ngig zu machen, aber nicht f\u00fcr alle F\u00e4lle geeignet.<\/p>\n<p>Du bekommst zum Beispiel einen Fehler, wenn du versuchst, einen lokal zur\u00fcckgesetzten Commit in ein <a href=\"https:\/\/kinsta.com\/de\/blog\/gitlab-vs-github\/\" rel=\"noopener\">remotes Repo<\/a> zu pushen, das diesen Commit enth\u00e4lt. In diesem Fall gibt es einen anderen Befehl, den du verwenden kannst.<\/p>\n<h3>Git revert verwenden<\/h3>\n<p>Obwohl <code>git reset<\/code> und <code>git revert<\/code> \u00e4hnlich aussehen, gibt es einige wichtige Unterschiede. In den bisherigen Beispielen geht es beim R\u00fcckg\u00e4ngigmachen darum, die Referenzzeiger und den HEAD zu einem bestimmten Commit zu verschieben. Das ist so, als w\u00fcrdest du die Spielkarten mischen, um eine neue Reihenfolge zu erstellen.<\/p>\n<p>Im Gegensatz dazu erstellt <code>git revert<\/code> einen neuen Commit auf der Grundlage der r\u00fcckg\u00e4ngig gemachten \u00c4nderungen, aktualisiert dann die Referenzzeiger und macht den Zweig zum neuen &#8222;Tipp&#8220;. Das ist auch der Grund, warum du diesen Befehl bei Konflikten zwischen remoten Repos verwenden solltest.<\/p>\n<p>Du kannst <code>git revert &lt;reference&gt;<\/code> verwenden, um einen Git-Merge r\u00fcckg\u00e4ngig zu machen. Beachte, dass du immer eine Commit-Referenz angeben musst, sonst wird der Befehl nicht ausgef\u00fchrt. Du kannst dem Befehl auch <code>HEAD<\/code> \u00fcbergeben, um zum letzten Commit zur\u00fcckzukehren.<\/p>\n<p>Du kannst Git aber auch mehr Klarheit dar\u00fcber geben, was du tun willst:<\/p>\n<pre><code class=\"language-bash\">git revert -m 1 &lt;reference&gt;\n<\/code><\/pre>\n<p>Wenn du die Zusammenf\u00fchrung aufrufst, hat der neue Commit zwei &#8222;Eltern&#8220; Einer bezieht sich auf die von dir angegebene Referenz, der andere ist die Spitze des Zweigs, den du zusammenf\u00fchren willst. In diesem Fall weist <code>-m 1<\/code> Git an, den ersten Elternteil &#8211; d.h. die angegebene Referenz &#8211; als &#8222;Hauptlinie&#8220; zu behalten.<\/p>\n<p>Die Standardoption f\u00fcr <code>git revert<\/code> ist <code>-e<\/code> oder <code>--edit<\/code>. Damit wird der Editor ge\u00f6ffnet, um die Commit-Nachricht zu \u00e4ndern, bevor du zur\u00fcckkehrst. Du kannst aber auch <code>--no-edit<\/code> \u00fcbergeben, dann wird der Editor nicht ge\u00f6ffnet.<\/p>\n<p>Du kannst auch <code>-n<\/code> oder <code>--no-commit<\/code> \u00fcbergeben. Damit wird <code>git revert<\/code> angewiesen, <em>keinen<\/em> neuen Commit zu erstellen, sondern die \u00c4nderungen &#8222;umzukehren&#8220; und sie dem Staging-Index und dem Arbeitsverzeichnis hinzuzuf\u00fcgen.<\/p>\n<h2>Der Unterschied zwischen Merging und Rebasing in Git<\/h2>\n<p>Anstelle des Befehls <code>git merge<\/code> kannst du auch <code>git rebase<\/code> verwenden. Dies ist ebenfalls eine M\u00f6glichkeit, \u00c4nderungen in ein Verzeichnis zu integrieren, allerdings mit einem Unterschied:<\/p>\n<ul>\n<li>Wenn du <code>git merge<\/code> verwendest, wird standardm\u00e4\u00dfig ein Drei-Wege-Merge durchgef\u00fchrt. Dabei werden Snapshots aus zwei aktuellen Zweigen kombiniert und mit einem gemeinsamen Vorg\u00e4nger beider Zweige zusammengef\u00fchrt, um einen neuen Commit zu erstellen.<\/li>\n<li>Beim Rebasing wird eine gepatchte \u00c4nderung aus einem abweichenden Zweig genommen und auf einen anderen Zweig angewendet, ohne dass der Vorg\u00e4nger ben\u00f6tigt wird. Das bedeutet, dass es keinen neuen Commit geben wird.<\/li>\n<\/ul>\n<p>Um diesen Befehl zu verwenden, gehst du zu dem Zweig, den du rebasen m\u00f6chtest. Von dort aus kannst du den folgenden Befehl verwenden:<\/p>\n<pre><code class=\"language-bash\">git rebase -i &lt;reference&gt;\n<\/code><\/pre>\n<p>In vielen Situationen wird deine Referenz dein Hauptzweig sein. Die Option <code>-i<\/code> startet das &#8222;interaktive Rebasing&#8220; Das gibt dir die M\u00f6glichkeit, die Commits zu \u00e4ndern, w\u00e4hrend sie sich verschieben. Damit kannst du die Commit-Historie aufr\u00e4umen, was einer der gro\u00dfen Vorteile von <code>git rebase<\/code> ist.<\/p>\n<p>Wenn du den Befehl ausf\u00fchrst, wird im Editor eine Liste der potenziell zu verschiebenden Commits angezeigt. Damit hast du die M\u00f6glichkeit, das Aussehen der Commit-Historie zu ver\u00e4ndern. Du kannst auch Commits zusammenf\u00fchren, wenn du den Befehl <code>pick<\/code> in <code>fixup<\/code> \u00e4nderst.<\/p>\n<p>Sobald du deine \u00c4nderungen gespeichert hast, f\u00fchrt Git den Rebase durch. Im Gro\u00dfen und Ganzen verwendest du Git merge f\u00fcr viele Konflikte. Das Rebasen hat aber auch viele Vorteile. W\u00e4hrend das Merge-Verfahren zum Beispiel einfach zu bedienen ist und du den Kontext deiner Merge-Historie beibehalten kannst, ist das Rebase-Verfahren sauberer, da du deine Commit-Historie zu einer einzigen zusammenfassen kannst.<\/p>\n<p>Trotzdem musst du beim Rebasing mehr Sorgfalt walten lassen, da die Gefahr von Fehlern gro\u00df ist. Au\u00dferdem solltest du diese Technik nicht bei \u00f6ffentlichen Zweigen anwenden, da sich das Rebasing nur auf dein Repo auswirkt. Um die daraus resultierenden Probleme zu beheben, musst du noch mehr Merges durchf\u00fchren und wirst mehrere Commits sehen.<\/p>\n<h2>Tools, die dir helfen, einen Git Merge besser zu verwalten<\/h2>\n<p>Angesichts der Komplexit\u00e4t von Git-Merge-Konflikten brauchst du vielleicht eine helfende Hand. Es gibt viele Werkzeuge, die dir helfen, einen erfolgreichen Merge durchzuf\u00fchren. Wenn du <a href=\"https:\/\/kinsta.com\/de\/blog\/php-editor\/\" rel=\"noopener\">Intellij IDEA<\/a> verwendest, hast du mit dem Men\u00fc <strong>Branches<\/strong> eine eingebaute Methode:<\/p>\n<figure id=\"attachment_155624\" aria-describedby=\"caption-attachment-155624\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155624 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/intellij-branches.png\" alt=\"Die untere Ecke des Intellij IDEA Code-Editors, die das Git-Widget-Panel zeigt. Das Rechtsklick-Kontextmen\u00fc wird angezeigt und hebt die Option Checkout hervor, um \u00c4nderungen am Zweig zu \u00fcberpr\u00fcfen.\" width=\"1000\" height=\"378\"><figcaption id=\"caption-attachment-155624\" class=\"wp-caption-text\">\u00dcberpr\u00fcfen eines Zweigs in Intellij IDEA.<\/figcaption><\/figure>\n<p><a href=\"https:\/\/code.visualstudio.com\/#built-in-git\" target=\"_blank\" rel=\"noopener noreferrer\">VSCode<\/a> bietet eine \u00e4hnliche Funktion in seiner Benutzeroberfl\u00e4che (UI). \u00c4ltere Atom-Benutzer werden feststellen, dass Microsoft hier seine fantastische <a href=\"https:\/\/kinsta.com\/de\/blog\/git-vs-github\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git-Integration<\/a> fortgesetzt hat, einschlie\u00dflich der M\u00f6glichkeit, sich ohne weitere Erweiterungen oder Add-ons <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-github\/\" rel=\"noopener\">mit GitHub zu verbinden<\/a>.<\/p>\n<p>\u00dcber die <strong>Befehlspalette<\/strong> erh\u00e4ltst du au\u00dferdem weitere Optionen. Das ist sogar bei Editoren der Fall, die auf dem Open-Source-Framework von VSCode aufbauen, wie z. B. <a href=\"https:\/\/www.onivim.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Onivim2<\/a>:<\/p>\n<figure id=\"attachment_155628\" aria-describedby=\"caption-attachment-155628\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155628 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/onivim-git-merge.png\" alt=\"Ein Teil des Onivim2-Bildschirms zeigt die Befehlspalette und den Befehl Git: Zweig zusammenf\u00fchren.\" width=\"1000\" height=\"396\"><figcaption id=\"caption-attachment-155628\" class=\"wp-caption-text\">Zugriff auf den Befehl Git: Zweig zusammenf\u00fchren \u00fcber die Befehlspalette in Onivim2<\/figcaption><\/figure>\n<p>Der Vorteil ist hier, wie bei allen Tools auf dieser Liste, dass du die Kommandozeile nicht brauchst, um Zusammenf\u00fchrungen durchzuf\u00fchren. Normalerweise musst du einen Quell- und einen Zielzweig aus einem Dropdown-Men\u00fc ausw\u00e4hlen und dann den Editor die Zusammenf\u00fchrung durchf\u00fchren lassen. Trotzdem musst du dich nicht ausklinken. Du kannst die \u00c4nderungen nachtr\u00e4glich \u00fcberpr\u00fcfen und dann den gew\u00fcnschten Commit vornehmen.<\/p>\n<p>Ein Editor, der eine eigene grafische Benutzeroberfl\u00e4che (GUI) f\u00fcr die Arbeit mit Git bietet, ist <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-man-sublime-text-benutzt\/\" rel=\"noopener\">Sublime Text<\/a>. Wenn du diesen Editor verwendest, k\u00f6nnte <a href=\"https:\/\/www.sublimemerge.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sublime Merge<\/a> eine ideale Erg\u00e4nzung f\u00fcr deinen Arbeitsablauf sein:<\/p>\n<figure id=\"attachment_155629\" aria-describedby=\"caption-attachment-155629\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155629 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/sublime-merge.png\" alt=\"Die Submline Merge-Oberfl\u00e4che zeigt eine Liste der Commits auf der linken Seite des Bildschirms sowie eine Zusammenfassung der \u00c4nderungen und Konflikte mit einem bestimmten Commit auf der rechten Seite.\" width=\"1000\" height=\"498\"><figcaption id=\"caption-attachment-155629\" class=\"wp-caption-text\">Die Sublime Merge Anwendung<\/figcaption><\/figure>\n<p>Unabh\u00e4ngig davon, f\u00fcr welchen Code-Editor du dich entscheidest, bietet er oft die M\u00f6glichkeit, mit Git zu arbeiten, ohne die Kommandozeile zu benutzen. Das ist sogar bei Vim und Neovim der Fall, wenn du <a href=\"https:\/\/github.com\/tpope\/vim-fugitive\">das Git Fugitive Plugin von Tim Pope<\/a> benutzt, das fantastisch und einfach zu bedienen ist.<\/p>\n<p>Es gibt aber auch ein paar spezielle Merge-Tools von Drittanbietern, die sich ausschlie\u00dflich auf diese Aufgabe konzentrieren.<\/p>\n<h3>Dedizierte Git Merge Anwendungen<\/h3>\n<p><a href=\"https:\/\/mergify.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mergify<\/a> zum Beispiel ist eine unternehmensweite Methode zum Zusammenf\u00fchren von Code, die in deine Continuous Integration\/Continuous Delivery (CI\/CD)-Pipeline und deinen Workflow integriert ist:<\/p>\n<figure id=\"attachment_155626\" aria-describedby=\"caption-attachment-155626\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155626 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/mergify-app.png\" alt=\"Ein Bereich der Mergify-Website mit einer Reihe von wei\u00df umrandeten Grafiken auf schwarzem Hintergrund. Es gibt Listen von Git-Zweigen, Timer, Code-Editoren und Diagramme.\" width=\"1000\" height=\"640\"><figcaption id=\"caption-attachment-155626\" class=\"wp-caption-text\">Die Mergify Website<\/figcaption><\/figure>\n<p>Einige der Funktionen hier helfen dir, die Aktualisierung deiner Pull Requests vor dem Merge zu automatisieren, sie nach Priorit\u00e4t neu zu ordnen und sie auch zu stapeln. F\u00fcr eine Open-Source-L\u00f6sung k\u00f6nnte <a href=\"http:\/\/meldmerge.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Meld<\/a> wertvoll sein:<\/p>\n<figure id=\"attachment_155625\" aria-describedby=\"caption-attachment-155625\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155625 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/meld-app.png\" alt=\"Die Meld-Anwendungs-Oberfl\u00e4che zeigt den Code nebeneinander an, mit blauer und gr\u00fcner Markierung, um \u00c4nderungen zwischen den einzelnen Dateien zu kennzeichnen.\" width=\"1000\" height=\"651\"><figcaption id=\"caption-attachment-155625\" class=\"wp-caption-text\">Die Meld-Anwendungs-Schnittstelle<\/figcaption><\/figure>\n<p>Die stabile Version unterst\u00fctzt Windows und <a href=\"https:\/\/kinsta.com\/de\/blog\/linux-befehle\/\" rel=\"noopener\">Linux<\/a> und l\u00e4uft unter der <a href=\"https:\/\/kinsta.com\/de\/lernen\/wordpress-gpl\/\" rel=\"noopener\">GPL-Lizenz<\/a>. Sie bietet dir grundlegende Funktionen, um Zweige zu vergleichen, deine Merges zu bearbeiten und mehr. Du bekommst sogar Zwei- oder Drei-Wege-Vergleiche und Unterst\u00fctzung f\u00fcr andere <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-versionskontrolle\/\" rel=\"noopener\">Versionskontrollsysteme<\/a> wie <a href=\"https:\/\/subversion.apache.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Subversion<\/a>.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Git ist ein unverzichtbares Werkzeug, um zusammenzuarbeiten und Code\u00e4nderungen effizient zu verwalten. Wenn jedoch mehrere Entwickler\/innen am selben Code arbeiten, kann es zu Konflikten kommen. Git-Merge-Strategien helfen dir, diese Konflikte zu l\u00f6sen, und es gibt viele M\u00f6glichkeiten, diese Aufgabe zu erledigen. F\u00fcr komplexere Git-Merge-Strategien musst du auf fortgeschrittene Taktiken zur\u00fcckgreifen.<\/p>\n<p>Das kann so einfach sein wie das Ignorieren negativer Leerzeichen oder das Durchsuchen der Suchprotokolle. Du musst aber auch nicht immer die Kommandozeile benutzen. Es gibt viele Anwendungen, die dir helfen, und auch dein Code-Editor hat oft eine integrierte Schnittstelle.<\/p>\n<p>Wenn du dir ein hochwertiges <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendungs-Hosting<\/a> sichern m\u00f6chtest, sind wir f\u00fcr dich da. Unsere Cloud-basierten Anwendungs-Hosting-Dienste sorgen daf\u00fcr, dass deine Full-Stack-App im Handumdrehen einsatzbereit ist.<\/p>\n<p>Welche dieser Git-Merge-Strategien hilft dir aus der Patsche? Lass es uns in den Kommentaren unten wissen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei der Arbeit, die in einem Entwicklungsprojekt stattfindet, ist Git ein Geschenk des Himmels. Wenn du jedoch viele Leute auf der Tanzfl\u00e4che hast, werden sich ein &#8230;<\/p>\n","protected":false},"author":199,"featured_media":63267,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[943],"class_list":["post-63266","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt\" \/>\n<meta property=\"og:description\" content=\"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-29T10:20:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T09:27:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt\",\"datePublished\":\"2023-06-29T10:20:16+00:00\",\"dateModified\":\"2023-07-27T09:27:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\"},\"wordCount\":4227,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\",\"name\":\"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg\",\"datePublished\":\"2023-06-29T10:20:16+00:00\",\"dateModified\":\"2023-07-27T09:27:44+00:00\",\"description\":\"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/git-merge\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-merge\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt - Kinsta\u00ae","description":"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/git-merge\/","og_locale":"de_DE","og_type":"article","og_title":"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt","og_description":"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!","og_url":"https:\/\/kinsta.com\/de\/blog\/git-merge\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-06-29T10:20:16+00:00","article_modified_time":"2023-07-27T09:27:44+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Jeremy Holcombe","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt","datePublished":"2023-06-29T10:20:16+00:00","dateModified":"2023-07-27T09:27:44+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/"},"wordCount":4227,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/git-merge\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/","url":"https:\/\/kinsta.com\/de\/blog\/git-merge\/","name":"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg","datePublished":"2023-06-29T10:20:16+00:00","dateModified":"2023-07-27T09:27:44+00:00","description":"Wenn du viele Commits zu bearbeiten hast, werden einige mit anderen kollidieren und einen Merge erfordern. In diesem Beitrag erf\u00e4hrst du, wie du komplexe Git-Merge-Aufgaben durchf\u00fchrst!","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/git-merge\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/git-merge.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/git-merge\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinsta.com\/de\/thema\/git\/"},{"@type":"ListItem","position":3,"name":"Wie man komplexe Git Merge-Aufgaben durchf\u00fchrt"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=63266"}],"version-history":[{"count":14,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63266\/revisions"}],"predecessor-version":[{"id":64213,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63266\/revisions\/64213"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63266\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/63267"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=63266"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=63266"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=63266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}