2013-10-22 16 views
14

Ich suche, Teile einer Datei mit git selektiv zusammenzuführen.Verschmelzen * Teile * einer Datei mit git?

Ich habe zwei Zweige - nennen Sie sie Master und geändert - das sind ein Commit auseinander; Wenn ich den Master zu einem anderen zusammenführe, würde er einfach vorspulen.

Allerdings möchte ich nur eine Reihe von Teilen - in einer Datei - von geändert zu Master zu integrieren.

Gibt es einen sauberen Weg, dies zu tun - z.B. frage ich, bevor ich jede Änderung mache? Oder bin ich dabei, es von Hand zu machen? (Nicht das Ende der Welt, aber ich würde es vorziehen, nicht zu, und - ja - das mit mehr Planung für meinen Teil hätte vermieden werden können - so ist das Leben.)

Antwort

11

Versuchen Sie folgendes:

git merge --no-ff --no-commit changed # Merge in 'changed' but don't commit 
git reset <path/to/your/file>   # Reset the stage state but not file 
git add -i <path/to/your/file>   # Start adding in interactive mode 

(Git will prompt you for each hunk; you can split hunks up if necessary.) 

git commit        # Finally commit the merge with only 
             # the bits you chose to stage. 

Beachten Sie jedoch, dass Git dadurch denkt, dass die Datei vollständig zusammengeführt ist. Wenn also jemand in demselben Zweig erneut zusammengeführt werden soll, werden die anderen Änderungen von diesem Commit immer noch nicht zusammengeführt oder vielleicht nicht was du willst.

Wenn Sie Hilfe zu den Bedeutungen der verschiedenen Optionen im interaktiven Modus git add benötigen, lesen Sie den Abschnitt git help add im Abschnitt "INTERAKTIVER MODUS".

+0

Das funktioniert wie angekündigt, obwohl ich "add -p" zu "add -i" für den interaktiven Modus geändert habe. Ich möchte git-merge direkt interaktiv mit hunks arbeiten. – lnmaurer

+0

Ja, schade, dass Sie hier kein Mergetool verwenden können. Gibt es separat eine Möglichkeit, mehrere Dateien gleichzeitig zu erstellen, oder muss ich nur eine Schleife schreiben, um dies zu ermöglichen? – Dan

Verwandte Themen