Mergekonflikte entstehen, wenn in der gleichen Zeile derselben Datei von verschiedenen Personen konkurrierende Änderungen vorgenommen werden oder wenn eine Person eine Datei bearbeitet und eine andere Person die Datei löscht. Weitere Informationen findest du unter Informationen zu Mergekonflikten.
Tipp: Du kannst den Konflikt-Editor von GitHub verwenden, um Mergekonflikte aufgrund konkurrierender Zeilenänderungen zwischen Branches zu lösen, die zu einem Pull Request gehören. Weitere Informationen findest du unter Mergekonflikt auf GitHub beheben.
Mergekonflikte durch konkurrierende Änderungen in der gleichen Zeile
Zur Behebung eines Mergekonflikts durch konkurrierende Änderungen in der gleichen Zeile in zwei verschiedenen Branches musst Du entscheiden, welche der Änderungen in einem neuen Commit übernommen werden sollen.
Ein Beispiel: Zwei Personen (du und eine andere Person) haben dieselben Zeilen der Datei styleguide.md in verschiedenen Branches desselben Git-Repositorys bearbeitet. Beim Versuch, diese Branches zu mergen, erhältst du einen Mergekonfliktfehler. Diesen Mergekonflikt musst Du durch einen neuen Commit beheben, um die beiden Branches zusammenführen zu können.
-
Öffne TerminalTerminalGit Bash.
-
Navigiere zu dem lokalen Git-Repository, in dem der Mergekonflikt auftritt.
cd REPOSITORY-NAME
-
Generiere eine Liste der Dateien, die von diesem Mergekonflikt betroffen sind. In diesem Beispiel tritt in der Datei styleguide.md ein Mergekonflikt auf.
$ git status > # On branch branch-b > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add <file>..." to mark resolution) > # > # both modified: styleguide.md > # > no changes added to commit (use "git add" and/or "git commit -a")
-
Öffne einen Text-Editor deiner Wahl, z. B. Visual Studio Code, und navigiere zu der Datei, in der Mergekonflikte auftreten.
-
Um in der Datei an den Anfang des Mergekonflikts zu gelangen, durchsuche die Datei nach dem Konfliktmarker
<<<<<<<
. Wenn du die Datei in im Text-Editor öffnest, siehst du die Änderungen im Head- oder Basisbranch nach der Zeile<<<<<<< HEAD
. Als Nächstes siehst du=======
, wodurch deine Änderungen von den Änderungen im anderen Branch getrennt werden, gefolgt von>>>>>>> BRANCH-NAME
. In diesem Beispiel hat eine Person im Basis- oder Headbranch „open an issue“ eingegeben, eine andere Person hat im Vergleichsbranch bzw.branch-a
hingegen „ask your question in IRC“ geschrieben.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
Entscheide, ob du nur die Änderungen deines Branch beibehalten, nur die Änderungen des anderen Branch beibehalten oder eine brandneue Änderung erstellen möchtest, die die Änderungen aus beiden Branches beinhalten kann. Lösche die Konfliktmarker
<<<<<<<
,=======
und>>>>>>>
, und nimm die gewünschten Änderungen im endgültigen Merge vor. In diesem Beispiel werden beide Änderungen in den Merge übernommen:If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
-
Füge Deine Änderungen hinzu bzw. stelle sie für das Staging bereit.
git add .
-
Gib Deine Änderungen mit einem Kommentar frei.
git commit -m "Resolve merge conflict by incorporating both suggestions"
Du kannst jetzt die Branches in der Befehlszeile mergen oder Folgendes tun: Pushen deiner Änderungen an dein Remoterepository auf GitHub pushen und Mergen deiner Änderungen in einem Pull Request.
Mergekonflikte durch das Entfernen einer Datei
Zur Behebung eines Mergekonflikts, der entsteht, wenn eine Person eine Datei in einem Branch löscht und eine andere Person die gleiche Datei in einem anderen Branch bearbeitet, musst Du entscheiden, ob die Datei in einem neuen Commit gelöscht oder beibehalten werden soll.
Ein Beispiel: Du hast eine Datei bearbeitet, beispielsweise die Datei README.md, und eine andere Person hat dieselbe Datei aus einem anderen Branch desselben Git-Repositorys entfernt. Beim Mergen beider Branches erhältst du einen Mergekonfliktfehler. Diesen Mergekonflikt musst Du durch einen neuen Commit beheben, um die beiden Branches zusammenführen zu können.
-
Öffne TerminalTerminalGit Bash.
-
Navigiere zu dem lokalen Git-Repository, in dem der Mergekonflikt auftritt.
cd REPOSITORY-NAME
-
Generiere eine Liste der Dateien, die von diesem Mergekonflikt betroffen sind. In diesem Beispiel tritt in der Datei README.md ein Mergekonflikt auf.
$ git status > # On branch main > # Your branch and 'origin/main' have diverged, > # and have 1 and 2 different commits each, respectively. > # (use "git pull" to merge the remote branch into yours) > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add/rm <file>..." as appropriate to mark resolution) > # > # deleted by us: README.md > # > # no changes added to commit (use "git add" and/or "git commit -a")
-
Öffne einen Text-Editor deiner Wahl, z. B. Visual Studio Code, und navigiere zu der Datei, in der Mergekonflikte auftreten.
-
Entscheide, ob du die entfernte Datei behalten möchtest. Meist empfiehlt es sich vor dieser Entscheidung, die letzten Änderungen an der gelöschten Datei im Texteditor anzuzeigen.
So fügst Du die gelöschte Datei wieder zu Deinem Repository hinzu:
git add README.md
So löschst Du die Datei aus Deinem Repository:
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
Gib Deine Änderungen mit einem Kommentar frei.
$ git commit -m "Resolve merge conflict by keeping README.md file" > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
Du kannst jetzt die Branches in der Befehlszeile mergen oder Folgendes tun: Pushen deiner Änderungen an dein Remoterepository auf GitHub pushen und Mergen deiner Änderungen in einem Pull Request.