2016-06-06 5 views
1

Ich habe jetzt ungefähr einen ganzen Tag lang versucht, eine einfache Zusammenführung zwischen einer Funktion und Entwicklung zu machen.Zusammenführen von Zweig, der keine Konflikte zum Auflösen erzeugt

Grundsätzlich alles, was ich will, ist in der Lage sein, manuell alle Konflikte von Feature in Entwicklung zu vereinen, so dass ich die neue Funktion ohne zu zerstören bekommen kann.

Hier sind die Dinge, die ich habe versucht, so weit

git checkout develop; git merge feature 
git checkout feature; git merge -s ours develop 
git checkout feature; git merge -s recursive -X ours develop 
git checkout develop; git merge -s recursive -X theirs feature 
git checkout develop; git merge -s recursive -X theirs feature 
git checkout feature; git merge -s resolve develop 

In all diesen Fällen entweder Zweig fast vollständig die andere außer Kraft setzt. Ich habe nicht die Möglichkeit, Konflikte in Dateien manuell zusammenzuführen.

mergetool wird für einige Dateien aufgerufen, Unterschiede in einer Datei werden jedoch nicht erkannt. Es sollte beachtet werden, dass diese Datei vor einiger Zeit in die Entwicklung integriert wurde. Dateien, die in devel gelöscht wurden, sind immer noch im Feature vorhanden, aber mit einer 'orig'-Erweiterung. Dies ist das Nächste, das ich bisher zum Synchronisieren beider Zweige erreicht habe, aber um den Preis, dass es nicht einfach ist, wo das Merkmal abzweigt.

git checkout develop; git rebase feature 

gibt eine Reihe von Optionen, um Dateien zu löschen oder zu halten und dann zum Fehler: file not found Continue merging other unresolved paths (y/n) ? y

ich noch haben versucht, Rosinen herauszupicken oder Bäume verwaisen. Vielleicht liegt die Lösung da?

Ist es möglich, dass ich einige Dateien gelöscht und neu erstellt habe und deshalb versucht git nicht einmal, Zweige zu kombinieren?

Muss ich jedes Mal, wenn ich ein neues Feature hinzufüge, manuell zusammenführen? Es scheint schwierig zu sein Git - how to force merge conflict and manual merge on selected file

Ich weiß, ich habe irgendwo versaut, aber ich kann nicht herausfinden, wo oder was ich falsch mache. Ich könnte nur alle Dateien manuell bearbeiten, die nicht geändert werden, aber das würde den Zweck der Verwendung von Git vereiteln.

Wo bin ich falsch gelaufen? Wie kann ich diese Situation beheben (ohne Dateien manuell bearbeiten zu müssen)? Und was soll ich nächstes Mal anders machen?

P.S. Für diejenigen, die neu sind zu git und erleben ähnliche Probleme beim Lernen, wie transformative Funktionen wie Merge und Rebase git reflog feature-name und git reset --hard [email protected]{n} zu verwenden sind unschätzbare Befehle. (Verwenden Sie immer --hard mit höchster Vorsicht, da lokale Änderungen verworfen werden)

EDIT: Während ich immer noch nicht weiß, warum das passiert ist VonC bot eine gute Stop-Gap-Lösung.

Für alle, die die Art und Weise Sie von einem lokalen Zweig zu einem neuen lokalen Ordner Blick auf diesen Beitrag Kasse fragt sich: https://stackoverflow.com/a/16493707/6419701

Die Art, wie ich eine Zusammenführung durchgeführt mit der ausgezeichneten meld tool für ubuntu ist die Syntax: meld folder1 folder2

+0

Hier sind 2 andere wirklich nützliche Befehle, die ich beim Experimentieren benutzt habe: git rebase --abort und git merge --abort – yosefrow

Antwort

1

in Ihrer aktuellen Situation, würde ich:

  • Kasse feature Niederlassung in einem neuen Pfad auf der Festplatte,
  • merge die beiden Zweige (develop und feature) mit einem Diff-Tool (kdiff3 oder andere), die außerhalb git (dh keine git merge, um nur einige Altmode Ordner Vergleichs-/merge) und Bereinigung der .orig Dateien,
  • Aufzeichnung der Verschmelzen von Entwickeln zu feature mit einem git merge --ours develop.

Dann nur zum Testen, würde ich eine gleichzeitige Änderung auf der gleichen Datei in den beiden Zweigen machen und sehen, ob ein git merge develop funktionierts und die Konfliktlösung Schritt eines traditionellen git merge bringen.

+0

Während dies eine gute Lösung ist, kann man die Dateien einzeln manuell zusammenführen versuchen zu vermeiden. Ich möchte in der Lage sein, git in Zukunft zu verwenden und muss nicht alles manuell ändern. Ich versuche nur herauszufinden, warum nichts funktioniert. Meine Theorie ist jetzt, dass die Datei, die nicht in der Rebase enthalten war, nicht, weil es keine Änderungen daran gemacht wurden, nachdem es zu Feature verzweigt wurde. Seit Rebase replays Modifikationen über eine Basis. – yosefrow

+0

@yosefh verschwenden Sie nicht mehr Zeit: manuelle Zusammenführung + merge Rekord gleich: Sie beginnen von frisch. – VonC

+0

VonC, ich schätze Ihre Bemühungen, mir zu helfen. Aber ich versuche zu verstehen, was ich falsch gemacht habe, damit ich es in Zukunft vermeiden kann und versuche es zu beheben, wenn es möglich ist. Sie haben jedoch vollkommen Recht, um Ergebnisse zu erzielen, ist die praktische Lösung nur eine manuelle Zusammenführung einer Datei nach der anderen. – yosefrow