Mergekonflikt in der Befehlszeile beheben
Mergekonflikte können Sie in der Befehlszeile und in einem Texteditor beheben.
Inhalt dieses Artikels
- Mergekonflikte durch konkurrierende Änderungen in der gleichen Zeile
- Mergekonflikte durch das Entfernen einer Datei
- Weiterführende Informationen
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 finden Sie unter „Informationen zu Mergekonflikten“.
Tipp: Zur Behebung von Mergekonflikten aufgrund konkurrierender Änderungen in der gleichen Zeile können Sie den Konflikteditor von GitHub Enterprise verwenden, sofern der Konflikt zwischen den Branches eines Pull Requests auftritt. Weitere Informationen finden Sie 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 müssen Sie entscheiden, welche der Änderungen in einem neuen Commit übernommen werden sollen.
Ein Beispiel: Sie und eine andere Person haben die gleichen Zeilen der Datei styleguide.md in verschiedenen Branches des gleichen Git-Repositorys bearbeitet. Beim Versuch, diese Branches zu mergen, erhalten Sie nun einen Mergekonflikt. Diesen Mergekonflikt müssen Sie durch ein neues Commit beheben, um die beiden Branches mergen zu können.
-
Open TerminalTerminalGit Bash.
-
Navigieren Sie zu dem lokalen Git-Repository, in dem der Mergekonflikt auftritt.
cd REPOSITORY-NAME
-
Generieren Sie eine Liste der Dateien, die von diesem Mergekonflikt betroffen sind. In diesem Beispiel enthält die Datei styleguide.md einen Mergekonflikt.
$ git status > # Auf Branch branch-b > # Sie haben nicht gemergte Pfade. > # (beheben Sie die Konflikte, und führen Sie "git commit" aus) > # > # Nicht gemergte Pfade: > # (verwenden Sie "git add
..." zum Kennzeichnen der Lösung) > # > # beide geändert: styleguide.md > # > keine Änderungen zum Commit hinzugefügt (verwenden Sie "git add" und/oder "git commit -a") -
Öffnen Sie Ihren bevorzugten Texteditor, beispielsweise Atom, und navigieren Sie zu der Datei mit den Mergekonflikten.
-
Um in der Datei an den Anfang des Mergekonflikts zu gelangen, durchsuchen Sie die Datei nach dem Konflikthinweis
<<<<<<<
. Wenn Sie die Datei in Ihrem Texteditor öffnen, sehen Sie die Änderungen im Head- oder Basis-Branch nach der Zeile<<<<<<< HEAD
. Danach sehen Sie=======
, die Trennzeichen zwischen Ihren Änderungen und den Änderungen im anderen Branch. Danach folgt>>>>>>> BRANCH-NAME
. In diesem Beispiel gab eine Person im Basis- oder Head-Branch „open an issue“ ein, eine andere Person im abgeglichenen Branch bzw. inbranch-a
hingegen „ask your question in IRC“.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
Decide if you want to keep only your branch's changes, keep only the other branch's changes, or make a brand new change, which may incorporate changes from both branches. Delete the conflict markers
<<<<<<<
,=======
,>>>>>>>
and make the changes you want in the final merge. 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ügen Sie Ihre Änderungen hinzu bzw. stellen Sie sie für das Staging bereit.
$ git add .
-
Schreiben Sie Ihre Änderungen fest. Fügen Sie Ihrem Commit dabei einen Kommentar hinzu.
$ git commit -m "Resolved merge conflict by incorporating both suggestions."
Sie können die Branches nun in der Befehlszeile mergen oder die Änderungen mittels Push an Ihr Remote-Repository auf GitHub Enterprise übertragen und Ihre Änderungen mit einem Pull Request mergen.
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, müssen Sie entscheiden, ob die Datei in einem neuen Commit gelöscht oder beibehalten werden soll.
Ein Beispiel: Sie haben eine Datei bearbeitet, beispielsweise die Datei README.md, und eine andere Person hat die gleiche Datei in einem anderen Branch des gleichen Git-Repositorys gelöscht. Beim Mergen beider Branches erhalten Sie einen Mergekonflikt. Diesen Mergekonflikt müssen Sie durch ein neues Commit beheben, um die beiden Branches mergen zu können.
-
Open TerminalTerminalGit Bash.
-
Navigieren Sie zu dem lokalen Git-Repository, in dem der Mergekonflikt auftritt.
cd REPOSITORY-NAME
-
Generieren Sie eine Liste der Dateien, die von diesem Mergekonflikt betroffen sind. In diesem Beispiel enthält die Datei README.md einen Mergekonflikt.
$ git status > # Auf Master-Branch > # Ihr Branch und 'origin/master' weichen voneinander ab; > # sie weisen jeweils 1 und 2 verschiedene Commits auf. > # (verwenden Sie "git pull" zum Mergen des Remote-Branch in Ihren Branch) > # Sie haben nicht gemergte Pfade. > # (beheben Sie die Konflikte, und führen Sie "git commit" aus) > # > # Nicht gemergte Pfade: > # (verwenden Sie "git add" und/oder "rm
..." zum Kennzeichnen der Lösung) > # > # von uns gelöscht: README.md > # > # keine Änderungen zum Commit hinzugefügt (verwenden Sie "git add" und/oder "git commit -a") -
Öffnen Sie Ihren bevorzugten Texteditor, beispielsweise Atom, und navigieren Sie zu der Datei mit den Mergekonflikten.
-
Entscheiden Sie, ob Sie die gelöschte Datei behalten möchten. Meist empfiehlt es sich vor dieser Entscheidung, die letzten Änderungen an der gelöschten Datei im Texteditor anzuzeigen.
So fügen Sie die gelöschte Datei wieder zu Ihrem Repository hinzu:
$ git add README.md
So löschen Sie die Datei aus Ihrem Repository:
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
Schreiben Sie Ihre Änderungen fest. Fügen Sie Ihrem Commit dabei einen Kommentar hinzu.
$ git commit -m "Resolved merge conflict by keeping README.md file." > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
Sie können die Branches nun in der Befehlszeile mergen oder die Änderungen mittels Push an Ihr Remote-Repository auf GitHub Enterprise übertragen und Ihre Änderungen mit einem Pull Request mergen.