Um selektiv Dateien aus einem Zweig in einen anderen Zweig zusammenzuführen, führen Sie
git merge --no-ff --no-commit branchX
wobei branchX
ist der Zweig, aus dem Sie in den aktuellen Zweig zusammenführen wollen.
El --no-commit
die Dateien, die von Git zusammengeführt wurden, ohne sie tatsächlich zu übertragen. Dadurch haben Sie die Möglichkeit, die zusammengeführten Dateien nach Belieben zu ändern und sie dann selbst zu übertragen.
Je nachdem, wie Sie die Dateien zusammenführen wollen, gibt es vier Möglichkeiten:
1) Sie wollen eine echte Verschmelzung.
In diesem Fall akzeptieren Sie die zusammengeführten Dateien so, wie Git sie automatisch zusammengeführt hat, und übertragen sie dann.
2) Es gibt einige Dateien, die Sie nicht zusammenführen wollen.
Sie möchten beispielsweise die Version im aktuellen Zweig beibehalten und die Version im Zweig, aus dem Sie zusammenführen, ignorieren.
Um die Version im aktuellen Zweig auszuwählen, führen Sie aus:
git checkout HEAD file1
Damit wird die Version von file1
im aktuellen Zweig und überschreiben die file1
automatisch von Git zusammengeführt.
3) Wenn Sie die Version in ZweigX (und nicht eine echte Zusammenführung) wünschen.
Laufen:
git checkout branchX file1
Damit wird die Version von file1
en branchX
und überschreiben file1
automatisch von Git zusammengeführt.
4) Der letzte Fall ist, wenn Sie nur bestimmte Zusammenführungen in file1
.
In diesem Fall können Sie die geänderte file1
direkt, aktualisieren Sie sie auf die Version, die Sie für die file1
zu werden, und sich dann zu verpflichten.
Wenn Git eine Datei nicht automatisch zusammenführen kann, meldet es die Datei als " unmerged "und erstellen Sie eine Kopie, in der Sie die Konflikte manuell lösen müssen.
Um dies anhand eines Beispiels näher zu erläutern, nehmen wir an, Sie möchten Folgendes zusammenführen branchX
in den aktuellen Zweig:
git merge --no-ff --no-commit branchX
Sie führen dann die git status
um den Status der geänderten Dateien anzuzeigen.
Zum Beispiel:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
Donde file1
, file2
y file3
sind die Dateien, die Git erfolgreich automatisch zusammengeführt hat.
Dies bedeutet, dass Veränderungen in der master
y branchX
für all diese drei Dateien wurden konfliktfrei miteinander kombiniert.
Sie können überprüfen, wie die Zusammenführung durchgeführt wurde, indem Sie die git diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Wenn Sie eine Zusammenführung unerwünscht finden, können Sie
- die Datei direkt bearbeiten
- speichern
git commit
Wenn Sie nicht fusionieren wollen file1
und die Version im aktuellen Zweig beibehalten wollen
ausführen.
git checkout HEAD file1
Wenn Sie nicht fusionieren wollen file2
und wollen nur die Version in branchX
ausführen.
git checkout branchX file2
Wenn Sie wollen file3
automatisch zusammengeführt werden sollen, tun Sie nichts.
Git hat es zu diesem Zeitpunkt bereits zusammengeführt.
file4
oben ist ein fehlgeschlagener Merge von Git. Das bedeutet, dass es in beiden Zweigen Änderungen gibt, die in derselben Zeile auftreten. In diesem Fall müssen Sie die Konflikte manuell auflösen. Sie können das Zusammenführen verwerfen, indem Sie die Datei direkt bearbeiten oder den Befehl checkout für die Version im gewünschten Zweig ausführen file4
zu werden.
Schließlich sollten Sie nicht vergessen git commit
.