421 Stimmen

Wie schließe ich die Zusammenführung ab, nachdem ich meine Zusammenführungskonflikte gelöst habe?

Ich habe die Grundlegende Verzweigung und Zusammenführung Abschnitt des Git Community Book.

Also folge ich ihm und erstelle einen Zweig: experimental .

Dann ich:

  1. zum experimentellen Zweig wechseln (git checkout experimental)

  2. einen Haufen Änderungen vornehmen

  3. Übertragen Sie es (git commit -a)

  4. Wechsel zum Master-Zweig (git checkout master)

  5. einige Änderungen vornehmen und diese festschreiben

  6. zurück zu experimental wechseln (git checkout experimental)

  7. Master-Änderung nach experimental zusammenführen (git merge master)

  8. es gibt einige Konflikte, aber nachdem ich sie aufgelöst habe, habe ich 'git add myfile' gemacht

  9. Und jetzt stecke ich fest, ich kann nicht zurück zum Master wechseln.

wenn ich es tue

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

und das habe ich getan:

$ git rebase --abort

Keine Umbasierung im Gange?

und das habe ich:

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

Was kann ich tun, damit ich zu meinem Master-Zweig zurückkehren kann?

13voto

Shimon Doodkin Punkte 3946

Einfach git commit es.

Wahlweise git abort es:
Ich bin auf einen Zusammenführungskonflikt gestoßen. Wie kann ich die Zusammenführung abbrechen?

Um das Leben beim Zusammenführen zu erleichtern, installieren Sie kdiff3 und konfigurieren Sie es als Mergetool. Anweisungen: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/

Diese Seite enthält dieses Video: https://www.youtube.com/watch?v=Cc4xPp7Iuzo

3voto

Rohit Maurya Punkte 146

Schritte zur Lösung von Konflikten:

  1. Checken Sie zunächst in den Zweig aus, in dem Sie die anderen Zweige zusammenführen wollen branch(BRANCH_NAME_TO_BE_MERGED)

"git checkout "MAIN_BRANCH"
  1. Dann fügen Sie es mit dem Befehl "MAIN_BRANCH" zusammen:

" git merge origin/BRANCH_NAME_TO_BE_MERGED "


Auto-merging src/file1.py
CONFLICT (content): Merge conflict in src/file1.py
Auto-merging src/services/docker/filexyz.py
Auto-merging src/cache.py
Auto-merging src/props.py
CONFLICT (content): Merge conflict in src/props.py
Auto-merging src/app.py
CONFLICT (content): Merge conflict in src/app.py
Auto-merging file3
CONFLICT (content): Merge conflict in file3
Automatic merge failed; fix conflicts and then commit the result.

Jetzt sehen Sie, dass "KONFLIKT (Inhalt)" für die Datei angezeigt wird, die "KONFLIKT" hat, Ihren Code zu sehen und sie zu lösen

  1. laufen. "git status" \=> Es wird Ihnen angezeigt, welche Dateien Sie hinzufügen müssen (die Sie bereits gelöst haben):

 Unmerged paths:
      (use "git add <file>..." to mark resolution)

        both modified:   file3
        both modified:   src/app.py
        both modified:   src/props.py
        both modified:   src/utils/file1.py
  1. Sobald Sie alle Konflikte gelöst haben, fügen Sie jede Datei einzeln mit dem folgenden git-Befehl hinzu

git add file3
git add src/app.py
git add src/props.py
git add src/utils/file1.py
  1. "git commit" (fügen Sie eine Nachricht hinzu, wenn Sie die Übergabe durchführen wollen, wenn nicht, öffnet sich der vi oder vim Editor, wo Sie "esc:q!" und dann "enter" drücken müssen)
  2. wieder laufen "git status"

 On branch MAIN_BRANCH
  Your branch is ahead of 'origin/MAIN_BRANCH' by 10 commits.
  (use "git push" to publish your local commits)

7. "git push"

2voto

Harry Robbins Punkte 504

Das erste, was ich klarstellen möchte, ist, dass Zweignamen nur ein Alias für einen bestimmten Commit sind. Ein Commit ist das, womit Git arbeitet, wenn Sie pullen, pushen, mergen und so weiter. Jeder Commit hat eine eindeutige ID.

Wenn Sie $ git merge ausführen, versucht Git, Ihren aktuellen Zweig auf den Commit vorzuspulen, auf dem sich der referenzierte Zweig befindet (mit anderen Worten, beide Zweignamen zeigen auf denselben Commit). Dieses Szenario ist für Git am einfachsten zu handhaben, da es keinen neuen Commit gibt. Stellen Sie sich vor, der Master springt auf das Lilipad, auf dem sich Ihr Zweig gerade befindet. Es ist möglich, das --no-ff Flag zu setzen, in diesem Fall wird Git einen neuen Commit erstellen, unabhängig davon, ob es irgendwelche Codekonflikte gab.

In einer Situation, in der es Codekonflikte zwischen den beiden Zweigen gibt, die Sie zusammenführen wollen (normalerweise zwei Zweige, deren Commit-Historie einen gemeinsamen Commit in der Vergangenheit aufweist), wird der schnelle Vorlauf nicht funktionieren. git kann die Dateien trotzdem automatisch zusammenführen, solange nicht dieselbe Zeile von beiden Zweigen in einer konfliktbehafteten Datei geändert wurde. in diesem Fall wird git die konfliktbehafteten Dateien für Sie zusammenführen UND automatisch committen. Mit $ git diff --cached können Sie überprüfen, wie Git vorgegangen ist. Sie können auch die Option --no-commit an den Merge-Befehl übergeben, wodurch geänderte Dateien in Ihrem Index verbleiben, die Sie dann hinzufügen und übertragen müssen. Sie können diese Dateien jedoch mit $ git diff überprüfen, um zu sehen, was der Merge-Befehl ändert.

Das dritte Szenario ist, wenn es Konflikte gibt, die Git nicht automatisch auflösen kann. In diesem Fall müssen Sie sie manuell zusammenführen. Meiner Meinung nach ist dies am einfachsten mit einem Merge-Take, wie araxis merge oder p4merge (kostenlos). In beiden Fällen müssen Sie jede Datei einzeln bearbeiten. Wenn der Merge nicht vorankommt, benutzen Sie $ git merge --continue, um ihn voranzutreiben. Git sollte Ihnen mitteilen, ob es nicht weitergehen kann und wenn ja, warum nicht. Wenn du das Gefühl hast, dass du die Zusammenführung zu einem bestimmten Zeitpunkt verpfuscht hast, kannst du $ git merge --abort verwenden, und die Zusammenführung wird rückgängig gemacht und du kannst von vorne beginnen. Wenn Sie fertig sind, ist jede Datei, die Sie zusammengeführt haben, eine geänderte Datei, die hinzugefügt und committed werden muss. Sie können mit $ git status überprüfen, wo sich die Dateien befinden. Wenn Sie die zusammengeführten Dateien noch nicht übertragen haben. Das müssen Sie tun, um die Zusammenführung abzuschließen. Sie müssen die Zusammenführung abschließen oder abbrechen, bevor Sie den Zweig wechseln können.

2voto

Nesha Zoric Punkte 5358

Ein Zusammenführungskonflikt tritt auf, wenn zwei Zweige, die Sie zusammenführen wollen, beide denselben Teil derselben Datei geändert haben. Sie können eine Liste von Konflikten erzeugen mit git status .

Wenn die widersprüchliche Zeile gefunden wird, bearbeitet Git den Inhalt der betroffenen Dateien mit visuellen Indikatoren, die beide Seiten des widersprüchlichen Inhalts markieren.

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

Wenn Sie Ihre konfliktbehafteten Dateien korrigiert haben und bereit sind, sie zusammenzuführen, müssen Sie nur noch Folgendes ausführen git add y git commit um den Merge-Commit zu erzeugen. Sobald die Übergabe erfolgt ist, git push die Änderungen an der Verzweigung.

Referenzartikel: Git-Zusammenführung .

2voto

hobgoblin Punkte 67

Nachdem alle Dateien hinzugefügt wurden, ist der nächste Schritt eine " Git Commit ".

"git status" schlägt vor, was zu tun ist: Dateien, die noch hinzugefügt werden müssen, werden unten aufgelistet, und wenn sie alle fertig sind, wird oben ein Commit vorgeschlagen, das den Merge-Status des aktuellen Zweigs erklärt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X