Git-Konflikt “beide gelöscht”

Lesezeit: 2 Minuten

Ich verstehe nicht, warum “beide gelöscht” ein Status für nicht zusammengeführte Pfade ist.

Wenn:

  • OldStandard ist die Basis
  • NewStandard ist das letzte Commit auf dem Trunk
  • OldCustom ist der Zweig (Fork von OldStandard), den wir versuchen, wieder in Master zusammenzuführen

Warum gibt es einen Konflikt mit einigen Dateien, die als „beide gelöscht“ markiert sind?

Ich verstehe den Konflikt für “beide hinzugefügt”, wenn eine Datei in NewStandard hinzugefügt wird und eine andere Version der Datei in OldCustom hinzugefügt wird.

Aber was ist das Problem beim Löschen, wenn die Datei in NewStandard gelöscht wurde und auch in OldCustom gelöscht wurde? Das ist ein äquivalenter Zustand, nein?

  • Git muss der Löschung einen Commit-Hash zuordnen. Welcher Commit soll hier die Verantwortung für die Löschung übernehmen?

    – Tom

    3. Juli 2017 um 9:49 Uhr

  • Mögliches Duplikat von Git-Zusammenführungskonflikt reproduzieren: DD

    – LeGEC

    3. Juli 2017 um 12:00 Uhr

Benutzer-Avatar
LeGEC

Wie in dieser Antwort angegeben (als Duplikat vorgeschlagen):

Sie können ein “beide gelöscht” sehen, wenn branchA hat ein git mv oldfile newstandard begehen, und branchB hat ein git mv oldfile newcustom verpflichten.

In diesem Fall beim Versuch, zusammenzuführen customBranch hinein standardBranch, git meldet einen Konflikt bei drei Dateien:

both deleted:  oldfile
added by them: newcustom
added by us:   newstandard

Wie bei jedem Konflikt liegt die endgültige Entscheidung in Ihren Händen:

git nur die Tatsache hervorheben, dass kann sein Es könnte ein Problem darin liegen, dass newcustom und newstandard in Ihrer endgültigen Codeversion zusammenleben, und kann sein Dies könnte mit der Tatsache zusammenhängen, dass beide erstellt wurden, indem sie eine Kopie von waren oldfile.

Sie können das manuell beheben:

  • wenn entfernt oldfile ist das erwartete Ergebnis: git reset -- oldfile,
  • wenn halten newstandard das erwartete Ergebnis ist, entfernen Sie das andere: git reset newcustom && git rm newcustom,
  • wenn einige Teile von newstandard und newcustom zusammengeführt werden sollen: Bearbeiten Sie sie von Hand oder verwenden Sie ein 3-Wege-Merge-Tool: meld newstandard newstandard newcustom
  • etc …

  • Wie können wir in diesem Fall entscheiden, welche Dinge wir behalten? Es wäre sinnvoll, die Löschung zu akzeptieren, und dann entweder newcustom oder newstandard beim Abschluss der Zusammenführung. Aber wie können wir klar sehen, dass wir eine Wahl zwischen diesen beiden Dateien treffen müssen (wenn es Hunderte von Konflikten gibt)? Verwenden git mergetool hilft hier nicht, habe ich recht?

    – Benutzer3341592

    3. Juli 2017 um 12:36 Uhr


  • @ user3341592: du hast recht, mergetool zeigt Ihnen die “korrekte” 3-Wege-Zusammenführung nur dann, wenn ein Konflikt “beide geändert” in einer einzigen Datei gelöst wird.

    – LeGEC

    3. Juli 2017 um 14:14 Uhr

1151360cookie-checkGit-Konflikt “beide gelöscht”

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy