2010-02-22 9 views
24

In einem Zweig in einem Zweig A wird eine Datei geändert und die Änderung festgeschrieben. Jetzt wird in einem anderen Zweig B dieselbe Datei bearbeitet und umbenannt.Resolve "CONFLICT (löschen/ändern)" in git

Beim Zusammenführen von B in A git erkennt den Konflikt richtig (CONFLICT (löschen/ändern)) und beide Dateien sind im Arbeitsverzeichnis.

Wenn ich beide Änderungen in einer Datei haben möchte, wie mache ich das am besten?

Es gibt git merge-file das ist - wenn ich recht habe - erwartet beide Dateien und einen gemeinsamen Vorfahren. Aber wie man letzteres gibt? Wie kann ich sagen "benutze $ path from $ commit" oder so ähnlich?

Beispiel:

mkdir git-rename-repo 
cd git-rename-repo 
git init 

echo "First line" > afile 

git add . 
git commit -m "First commit in master" 
git checkout -b mybranch 

echo "Second line in mybranch" >> afile 
git mv afile bfile 

git commit -a -m "change and rename in mybranch" 
git checkout master 

echo "Changed first line in master" > afile 

git commit -a -m "changed afile" 
git merge mybranch 

ich jetzt eine Datei mit dem Namen 'BFILE' mit beiden Änderungen wollen:

Changed first line in master Second line in mybranch

Dank

Antwort

1

UPDATE Okay, git des rekursiven Merge-Algorithmus macht das ganz gut für sich. Ich habe nur zu kleine Dateien verwendet, um es zu testen, also war die relative Ähnlichkeit unter dem Auslöser der Umbenennungserkennung.

Wenn ich eine Zeile einer Datei mit zwei kleinen Zeilen ändere, ist die relative Änderung sehr groß.


Natürlich könnte ich so etwas wie

git show HEAD^:afile > afile_ancestor 
kdiff3 -m afile_ancestor afile bfile 

P. S .: tun Sorry für die gebrochene Formatierung oben. Ich hatte JavaScript nicht eingeschaltet, daher konnte ich keine Vorschau sehen.

10

Auf meinem Fall war es eine gelöschte Datei auf dem Repository nicht vorhanden

CONFLICT (delete/modify): ERD.pdf deleted in HEAD and ... 

Ich muss nur tun: git rm ERD.pdf

Hoffnung, das hilft.

+2

, dass Sie die gelöschte Datei annehmen möchten geht davon aus, die explizit _not true_ in Frage. –

+0

Das bedeutet, dass Ihr lokaler die Datei nicht hat, und git, dass es auf stash. Der Grund, warum Sie den Konflikt haben – workdreamer

+0

Das ursprüngliche Plakat (es war _not_ me) ** HABEN DIE DATEI ** in der lokalen Revision. Es ist jedoch ** unterschiedlich benannt **. Daher vorschlägt, die gelöschte Version zu nehmen ist falsch. Die Änderungen ** müssen ** mit der Datei unter seinem aktuellen, geänderten Namen zusammengeführt werden. –

7

Ich hatte auch das Szenario

** KONFLIKT (ändern/löschen): *** Dateiname in HEAD gelöscht und in 6efb2a94ba0601aa1ec5050ab222a0359ee8379a geändert. Version 6efb2a94ba0601aa1ec5050ab222a0359ee8379a von Filenamen links im Baum. *

Ich war auch ebenso verwirrt und erreichte diesen Beitrag. Aber bei der Eingabe git status sind alle Zweifel verschwunden. git status erklärte die folgende über die Konflikte in Dateien:

unmerged Pfade:
(use „git add/rm ..."Gegebenenfalls markieren Auflösung)

Also ich habe gerade git rm FileName, und danach der Konflikt gelöst wurde.

+0

dank Workdreamer – shah1988