Ich habe 2 Git-Zweige branch1 und branch2 und möchte file.py in branch2 in file.py in branch1 und nur diese Datei zusammenführen.
Im Wesentlichen möchte ich nur an der Datei.py in branch1 arbeiten, aber den Befehl merge nutzen. Was ist der beste Weg, dies zu tun?
Antworten:
Wenn Inhalte
file.py
aus Zweig2 eingehen , die nicht mehr für Zweig1 gelten , müssen einige Änderungen ausgewählt und andere belassen werden . Führen Sie zur vollständigen Kontrolle eine interaktive Zusammenführung mit dem--patch
Schalter durch:Im Abschnitt zum interaktiven Modus in der Manpage
git-add(1)
werden die zu verwendenden Tasten erläutert:Der Befehl split ist besonders nützlich.
quelle
git init <dir>
) zu erstellen und es schließlich wegzuwerfen (rm -r <dir>
).Obwohl dies an sich keine Zusammenführung ist , wird manchmal der gesamte Inhalt einer anderen Datei in einem anderen Zweig benötigt. Der Blog-Beitrag von Jason Rudolph bietet eine einfache Möglichkeit, Dateien von einem Zweig in einen anderen zu kopieren. Wenden Sie die Technik wie folgt an:
Jetzt
file.py
ist jetzt in branch1 .quelle
file.py
mit allem, was in Zweig 2 ist.Keine der anderen aktuellen Antworten "führt" die Dateien tatsächlich zusammen, als ob Sie den Befehl "Zusammenführen" verwenden würden. (Im besten Fall müssen Sie die Unterschiede manuell auswählen.) Wenn Sie die Zusammenführung mithilfe der Informationen eines gemeinsamen Vorfahren nutzen möchten, können Sie ein Verfahren befolgen, das auf dem im Abschnitt "Erweitertes Zusammenführen" des Git enthaltenen Verfahren basiert Referenzhandbuch.
Für dieses Protokoll gehe ich davon aus, dass Sie die Datei 'path / to / file.txt' von origin / master in HEAD zusammenführen möchten - ändern Sie sie entsprechend. (Sie müssen sich nicht im obersten Verzeichnis Ihres Repositorys befinden, aber es hilft.)
Die Git-Zusammenführungsdatei sollte alle Ihre Standard-Zusammenführungseinstellungen für die Formatierung und dergleichen verwenden.
Beachten Sie auch, dass Sie direkt mit der Datei arbeiten können, wenn Ihre "unsere" die Arbeitskopie ist und Sie nicht übermäßig vorsichtig sein möchten:
quelle
Sind alle Änderungen
file.py
inbranch2
ihrem eigenen Commits, getrennt von Änderungen an anderen Dateien? Wenn ja, können Sie einfachcherry-pick
die Änderungen umstellen:Andernfalls
merge
wird nicht über einzelne Pfade gearbeitet. Sie können auch einfach einengit diff
Patch mitfile.py
Änderungen vonbranch2
undgit apply
an erstellenbranch1
:quelle
Sie können
stash
undstash pop
die Datei:quelle
Um nur die Änderungen von branch2 zusammenzuführen
file.py
, lassen Sie die anderen Änderungen verschwinden .Beim Zusammenführen wird niemals eine andere Datei angezeigt. Möglicherweise müssen Sie die Kassen "-f", wenn die Bäume unterschiedlich genug sind.
Beachten Sie, dass branch1 so aussieht, als wäre alles in der Geschichte von branch2 bis zu diesem Punkt zusammengeführt worden, was möglicherweise nicht Ihren Wünschen entspricht. Eine bessere Version der ersten Kasse oben ist wahrscheinlich
In diesem Fall sollte die Commit-Nachricht wahrscheinlich auch sein
quelle
Ich bin in der gleichen Situation, ich möchte eine Datei aus einem Zweig zusammenführen, der viele Commits auf 2 Zweigen hat. Ich habe viele Möglichkeiten ausprobiert und andere, die ich im Internet gefunden habe, und alle sind fehlgeschlagen (weil der Commit-Verlauf komplex ist), also entscheide ich mich, meinen Weg zu gehen (den verrückten Weg).
quelle
Was ich getan habe, ist ein bisschen manuell, aber ich:
revert
;HEAD~1
, um ihren Status beim Zusammenführungs-Commit zu ermitteln.Hässlich? Ja. Leicht zu erinnern? Auch ja.
quelle