Ich muss die in einem Zweig eingeführten Änderungen auf einen anderen Zweig anwenden. Ich kann Cherry Pick verwenden, um das zu tun. In meinem Fall möchte ich jedoch Änderungen anwenden, die nur für eine Datei relevant sind, ich muss nicht ganze Commits auswählen. Wie geht das?Wie man nur Änderungen für nur eine Datei auswählt, nicht das ganze Commit
Antwort
Sie haben verschiedene Möglichkeiten auf, was Sie erreichen wollen:
Wenn der Inhalt der Datei dem Zielzweig entsprechen soll, können Sie git checkout <branch> -- <filename>
verwenden. Dies wird jedoch die Änderungen, die bei einem einzelnen Commit passiert sind, nicht "herauspicken", sondern nur den resultierenden Zustand der Datei nehmen. Wenn Sie also eine Zeile in einen Commit eingefügt haben, aber vorherige Commits mehr geändert haben und Sie nur diese Zeile ohne diese anderen Änderungen hinzufügen möchten, ist ein Checkout nicht das, was Sie wollen.
Wenn Sie den Patch, der in einer Festschreibung eingeführt wurde, nur auf eine einzelne Datei anwenden möchten, haben Sie mehrere Optionen. Sie könnten git cherry-pick -n
ausführen, d. H. Ohne es zu committen, bearbeiten Sie das Commit (z. B. setzen Sie alle Dateien mit git reset -- .
zurück und fügen Sie nur die Datei hinzu, die Sie tatsächlich ändern möchten, indem Sie git add <filename>
verwenden). Oder Sie könnten das Diff für die Datei erstellen und das diff gilt dann:
git diff <branch>^..<branch> -- <filename> | git apply
Eine weitere praktische Sache zu tun ist, den Patch lokal und dann verwenden:
git checkout {<name_of_branch>, commit's SHA} <path to the file>
Das ist keine Rosinenpickerei though.
Warnung: Wie @poke in seiner Antwort sagt, werden die Änderungen nicht kopiert; Es kopiert den gesamten Status der Datei. Wenn Sie also die Änderungen eines Commits an die Datei anhängen wollen, dann enden Sie, indem Sie so auschecken, alle neueren Änderungen überschreiben, was nicht gut ist. –
Dies ist, was Sie suchen,:
git checkout target-branch sha1 path/to/file
SHA1 ist optional
nein, "pick * changes * in commit" ist nicht "pick whole file" – Abyx
ein patch file
erstellen und anwenden.
git diff branchname -- filename > patchfile
git apply patchfile
EDIT:
Da müssen Sie die Änderungen von einem Commit, erstellen Sie den Patch so nehmen:
git show sha1 -- filename > patchfile
'git diff sha1' (oder' git diff branch' - es ist das gleiche, wenn die Verzweigung auf den gleichen Hash zeigt) wird nur ein diff von erzeugen das aktuelle Arbeitsverzeichnis in Bezug auf diesen Hash, aber nicht was einen selbst eingeführten Commit ändert. – poke
Korrigieren. Bearbeitete die Antwort. Vielen Dank. – Sailesh
-1 'git checkout' mit einem Dateinamen ist der richtige Hammer für diesen Nagel. Beide Optionen sind unnötig komplex. –
Git hat alles fertig :)
Verwenden Sie einfach git checkout <sha> <path-to-file>
Das ist kein Cherry-Pick - der die Datei komplett auscheckt. Das Ziel ist eine bestimmte Änderung von einem Commit. Oft sind das die gleichen Dinge, aber manchmal nicht. – AndrewF
git reset HEAD~1
die Dateien in prä- bewegt Festschreibung Stufe
git stash
entfernt aus dem Speicher
Jetzt ist Ihr Zweig ziemlich sauber ist (zurück zur vorherigen Festschreibung)
Hat überhaupt nichts damit zu tun, dass Kirschen eine einzelne Datei auswählt. –
Die top-rated Antwort heißt es, dass git checkout <branch> -- <filename>
. Dieser Ansatz funktioniert jedoch nur, wenn die Datei im aktuellen Zweig vorhanden ist.
Das ist wahr. Erstellen Sie zuerst eine leere Datei, z. 'touch filename' – Fookiee
Sie können jetzt kommentieren Sie haben 50 Punkte ... –
Was neige ich zu tun ist, git ls-tree
nur zu verwenden, tun:
git ls-tree -r <commit-id> |grep 'your filename'
# there will be output that shows a SHA1 of your file
git show ${SHA1 of your file} > 'your filename'
Dadurch werden alle Dateinamen drucken Sie Ihre grep passende und gibt SHA1 Schlüssel der Dateien in der Commit.
Git Show kann auch auf Dateien außerhalb Ihrer Branche verwendet werden. Verwenden Sie >
von Ihrer Shell, um die Ausgabe in eine Datei zu leiten, gibt Ihnen das Ergebnis, das Sie suchen.
git checkout the_branch_with_the_change the/path/to/the/file/you/want.extension
dies funktioniert, wenn Sie eine einzelne Datei aus einem anderen Zweig wollen auf den aktuellen Arbeitszweig
Seien Sie vorsichtig, Änderungen in der Datei, die nicht in der Version aus dem anderen Zweig sind, gehen verloren. –
stimmte damit überein. Dies ist nützlich, wenn Sie nur eine Kopie der Datei benötigen und diese im aktuellen Zweig ändern möchten. –
Man kann Globs (Pfad/*) verwenden und mehr als einen Pfad/Datei angeben – Todd
- 1. Commit nur Eigenschaft Änderungen am Stamm von Repo, nicht Dateien
- 2. SVN (Kommandozeile unter Linux) Wie man einige Änderungen ignoriert (nur lokal bleiben) commit Rest der Datei
- 3. Mercurial commit nur Tipp
- 4. Zip letzte festgeschriebene Änderungen nur
- 5. CouchDB, wie man Dokument Änderungen nur
- 6. QT Creator: Wie kompiliert man nur Änderungen
- 7. MongoDB/Ruby (Mongoid): wie man nur eingebettete Dokumente auswählt
- 8. JPA TABLE_PER_CLASS Vererbung: Wie man nur Superklasseneinträge auswählt?
- 9. Python-Wörterbuch, das nur Änderungen speichert
- 10. Wie erstellt man eine Datei nur, wenn sie nicht existiert?
- 11. Wie eine Datei nur für Konsole
- 12. git-diff: Zeige nur Änderungen, die für das Commit inszeniert wurden.
- 13. git-nur Whitespace-Änderungen hinzufügen?
- 14. d3 Teilstriche nur für ganze Zahlen
- 15. REAL() kann nur auf eine 'numerische', nicht eine 'ganze Zahl'
- 16. Wie wird das ganze PDF (nicht nur eine Seite) mit PDF.JS angezeigt?
- 17. Wie akzeptiert man nur ganze Zahlen in C++
- 18. Verschmelzen nur ausgewählte Änderungen in Git
- 19. Wie man [Wort] mit Wort ersetzt, das Regex.Replace verwendet und das ganze Wort nur ersetzen sollte
- 20. Wie zeigt man nur ganze Zahlen auf yAchsen von HighChart?
- 21. Wie scan ich nur ganze Zahlen?
- 22. Das effizienteste Idiom nur eine ganze Zahl aus einer Datei zu lesen?
- 23. Wie kompiliert man nur eine .h-Datei in einem Makefile?
- 24. Import LESS-Datei für nur eine Seite
- 25. Diehard test nur ganze Zahlen?
- 26. Wie liest man nur das erste Kind?
- 27. Gibt es eine Möglichkeit, nur Änderungen und Fehler anzuzeigen
- 28. Wie sichert man die PHP-Datei nur für Cron-Aufgaben?
- 29. MYSQL Autoincrement eine Spalte oder nur eine ganze Zahl, Differenz?
- 30. MyApp-Swift.h-Datei nicht gefunden. nur für eine bestimmte Klasse
möglich Duplikat kopiert werden [Wie git-cherry-pick ändert sich nur bestimmte Dateien?] (Http: //stackoverflow.com/questions/5717026/how-to-git-cherry-pick-only-changes-to-certain-files) – Potherca