Ich habe zwei Zweige (A und B) und möchte eine einzelne Datei aus Zweig A mit einer entsprechenden einzelnen Datei aus Zweig B zusammenführen.
Antworten
Zu viele Anzeigen?Ich bin auf das gleiche Problem gestoßen. Um genau zu sein, habe ich zwei Zweige A
y B
mit denselben Dateien, aber einer anderen Programmierschnittstelle in einigen Dateien. Jetzt sind die Methoden der Datei f
die unabhängig von den Schnittstellenunterschieden in den beiden Zweigen sind, wurden im Zweig B
Die Änderung ist jedoch für beide Branchen von Bedeutung. Ich muss also nur eine Datei zusammenführen f
der Branche B
in die Datei f
der Branche A
.
Ein einfacher Befehl löste das Problem bereits für mich, wenn ich davon ausgehe, dass alle Änderungen in beide Zweige übertragen werden A
y B
:
git checkout A
git checkout --patch B f
Der erste Befehl wechselt in die Verzweigung A
in den Bereich, den ich zusammenführen möchte B
die Version der Datei f
. Der zweite Befehl patcht die Datei f
con f
de HEAD
de B
. Sie können sogar einzelne Teile des Patches akzeptieren/verwerfen. Anstelle von B
Sie können hier jede beliebige Übergabe angeben, es muss nicht sein HEAD
.
Gemeinschaft bearbeiten : Wenn die Datei f
en B
existiert nicht auf A
noch nicht, dann lassen Sie die --patch
Option. Andernfalls erhalten Sie die Meldung "Keine Änderung".
Dabei wird das interne Difftool von Git verwendet. Vielleicht ein wenig Arbeit zu tun, aber geradeaus.
#First checkout the branch you want to merge into
git checkout <branch_to_merge_into>
#Then checkout the file from the branch you want to merge from
git checkout <branch_to_merge_from> -- <file>
#Then you have to unstage that file to be able to use difftool
git reset HEAD <file>
#Now use difftool to chose which lines to keep. Click on the mergebutton in difftool
git difftool
#Save the file in difftool and you should be done.
In solchen Situationen gehe ich folgendermaßen vor. Es ist ein Kunstgriff, aber für mich funktioniert er gut.
- Erstellen Sie einen weiteren Zweig, der auf Ihrem Arbeitszweig basiert.
- git pull/git merge die Revision (SHA1), die die Datei enthält, die Sie kopieren möchten. Damit werden alle Ihre Änderungen zusammengeführt, aber wir verwenden diesen Zweig nur, um die eine Datei zu kopieren.
- Bereinigen Sie alle Konflikte usw. und untersuchen Sie Ihre Datei.
- Ihren Arbeitszweig auschecken
- Prüfen Sie die von der Zusammenführung übertragene Datei.
- Setzen Sie es um.
Ich habe Parcheando ausprobiert, aber meine Situation war zu hässlich dafür. Also kurz gesagt würde es so aussehen:
Arbeitszweig: A Experimenteller Zweig: B (enthält file.txt mit den Änderungen, die ich einfügen möchte).
git checkout A
Erstellen Sie einen neuen Zweig auf der Grundlage von A:
git checkout -b tempAB
B in tempAB zusammenführen
git merge B
Kopieren Sie den sha1-Hash der Zusammenführung:
git log
commit 8dad944210dfb901695975886737dc35614fa94e
Merge: ea3aec1 0f76e61
Author: matthewe <matthewe@matthewe.com>
Date: Wed Oct 3 15:13:24 2012 -0700
Merge branch 'B' into tempAB
Prüfen Sie Ihren Arbeitszweig:
git checkout A
Prüfen Sie Ihre korrigierte Datei:
git checkout 7e65b5a52e5f8b1979d75dffbbe4f7ee7dad5017 file.txt
Und das war's dann auch schon. Legen Sie Ihr Ergebnis fest.
Sie können es verwenden:
git merge-file
Tipp: https://www.kernel.org/pub/software/scm/git/docs/git-merge-file.html
Ich fand diesen Ansatz einfach und nützlich: Wie man bestimmte Dateien aus einem anderen Zweig "zusammenführt
Es hat sich herausgestellt, dass wir uns zu sehr anstrengen. Unser guter Freund git checkout ist das richtige Werkzeug für diese Aufgabe.
git checkout source_branch <paths>...
Wir können git checkout einfach den Namen des Feature-Zweigs A und die Pfade zu den spezifischen Dateien geben, die wir zu unserem Master-Zweig hinzufügen wollen.
Bitte lesen Sie den ganzen Artikel, um mehr zu verstehen
- See previous answers
- Weitere Antworten anzeigen