2017-03-04 4 views
-2

Ich weiß, wenn Sie die gleichen Zeilen in einer Datei ändern und Sie versuchen, die Zweige zusammenführen, würden Sie einen Zusammenführungskonflikt erhalten, da es nicht wissen, welche Version zu halten.Git merge (Konflikt)

Also, heißt das, wenn Sie verschiedene Zeilen in einer Datei ändern, würde git sie zusammenführen können? Gilt dies nur für das Hinzufügen neuer Zeilen oder Löschungen? Was ist, wenn in einem Zweig die Datei unverändert/unberührt ist und in einem anderen Zweig einige Zeilen in dieser Datei gelöscht werden? Wenn wir die Zweige zusammenführen, behält Git die Löschung bei?

Danke!

+0

Mögliches Duplikat von [So lösen Sie Zusammenführungskonflikte in Git?] (Http://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) – thirtythreeforty

Antwort

0

Wenn zwei Benutzer an derselben Datei arbeiten, treten in der Regel keine Zusammenführungskonflikte auf, wenn sie nicht dieselben Zeilen in der Datei ändern.

Dies bedeutet, dass, wenn eine Zeile in einer Verzweigung gelöscht und in einer anderen nicht berührt wird, die Löschung beibehalten wird, wenn die beiden Zweige zusammengeführt werden.

2

Git führt keine Dateien zusammen. Es führt Änderungen zusammen.

Nun, technisch verbindet es Zweige, aber wenn wir eine einzige Datei betrachten, führt es Änderungen in diesen Zweigen zusammengeführt.

Also, wenn Sie sagen, in einem Zweig haben wir keine Datei geändert, und in einem anderen haben wir einige Zeilen der Datei gelöscht, wenn Sie zusammenführen, dann ja, die Streichungen werden beibehalten und zusammengeführt. Das heißt, in den endgültigen zusammengeführten Dateien werden diese Zeilen ebenfalls gelöscht.

Der genaue Algorithmus ist ziemlich komplex und mindestens komplexer als "nicht die gleichen Linien".

Zum Beispiel müssen die Zusammenführungsalgorithmen den Kontext einer Änderung identifizieren, und dazu werden umgebende Linien benötigt, die sich nicht geändert haben.

Wenn Sie also in einer Verzweigung eine einzelne Zeile ändern und in einer anderen Verzweigung die vorherige oder nächste Zeile ändern, kann das Zusammenführen zu einem Zusammenführungskonflikt führen.

+0

Ich denke, "ändert Änderungen" ist technisch korrekter als "Zweige zusammenführen", da Git nur eine Zusammenführungsbasis findet und zwei Commits mit dieser Zusammenführungsbasis vergleicht. Insbesondere können Sie 'git checkout hash1; git merge hash2', um ein loses HEAD-Commit einer Zusammenführung eines anderen spezifischen Commits zu machen. Man kann argumentieren, dass dies zwei anonyme Zweige sind, so dass es auf die eine oder andere Weise nicht wirklich klar ist, und auf jeden Fall sind es nur feine Unterschiede, und Ihre Antwort ist richtig. :-) – torek