Ich benutze Git und arbeite am Master-Zweig. Dieser Zweig hat eine Datei namens app.js
.
Ich habe eine experiment
Niederlassung, in der ich eine Reihe von Änderungen und Tonnen von Commits vorgenommen habe. Jetzt möchte ich alle Änderungen, die vorgenommen wurden, nur von app.js
von experiment
zu master
Zweig bringen.
Wie mache ich das?
Ich möchte noch einmal keine Zusammenführung. Ich möchte nur alle Änderungen app.js
von experiment
Zweig zu master
Zweig einbringen .
git
git-checkout
Nick Vanderbilt
quelle
quelle
master
kann abweichenexperiment
, z. B. kann Änderungen enthalten, die aus anderen Zweigen zusammengeführt wurden, die in der Datei verloren gehen würden, wird nur kopiert. PS hingegen will er nicht zusammenführen, aber soweit ich weiß, bezieht sich dergit merge
Begriff nur auf die Verzweigung, nicht auf eine bestimmte Datei, also kein Widerspruch hier.Antworten:
Siehe auch git, wie Sie Änderungen an einer Datei rückgängig machen können.
Update August 2019, Git 2.23
Mit den neuen
git switch
undgit restore
Befehlen wäre das:Standardmäßig wird nur der Arbeitsbaum wiederhergestellt.
Wenn Sie den Index ebenfalls aktualisieren möchten (dh den Dateiinhalt wiederherstellen und mit einem Befehl zum Index hinzufügen möchten ):
Wie Jakub Narębski in den Kommentaren erwähnt:
funktioniert auch, außer dass, wie in der SO-Frage " Wie rufe ich eine einzelne Datei aus einer bestimmten Revision in Git ab?" ich " beschrieben, den vollständigen Pfad aus dem Stammverzeichnis des Repos verwenden müssen.
Daher der Pfad / zu / app.js, den Jakub in seinem Beispiel verwendet.
Wie Frosty im Kommentar erwähnt:
Aber für
git checkout
odergit show
können Sie tatsächlich auf jede gewünschte Revision verweisen, wie in der SO-Frage " Git Checkout-Revision einer Datei in Git GUI " dargestellt:wäre das gleiche ist $ FILENAME ist ein vollständiger Pfad einer versionierten Datei.
$REVISION
kann wie folgt seingit rev-parse
:und so weiter.
schmijos fügt in den Kommentaren hinzu :
quelle
experiment:./app.js
. (Sie müssen nicht den vollständigen Pfad angeben.) Ich habe dies dank der sehr hilfreichen Fehlermeldung gelernt, die git mir gegeben hat: "Meinten Sie 'mybranch: full / path / to / my / file.xsl' aka 'mybranch: ./file.xsl '? " Ja, habe ich! Ich glaube nicht, dass mich eine fatale Fehlermeldung jemals so begeistert hat.git restore -s new-feature path/to/app.js
Alles ist viel einfacher, verwenden Sie dafür die Git-Kaufabwicklung.
Angenommen,
you're on master
Verzweigung, umapp.js from new-feature
Verzweigung zu erhalten, tun Sie:Dadurch erhalten Sie den Inhalt der gewünschten Datei. Sie können wie immer einen Teil von sha1 anstelle des Zweignamens für neue Funktionen verwenden , um die Datei so wie sie in diesem bestimmten Commit war.
Hinweis :
new-feature
Muss ein lokaler Zweig sein, kein entfernter.quelle
git checkout origin/source_branch path/to/file
denn wenn Sie es versäumt haben, den Quellzweig Ihres lokalen Repos zu aktualisieren, erhalten Sie möglicherweise eine alte Version der Datei ... Fragen Sie mich, woher ich das weiß. ;)Beispiel:
Dies funktioniert nicht, wenn Ihr Filialname einen Punkt enthält.
quelle
Ergänzend zu den Antworten von VonC und chhh.
oder
quelle
--
) zwischen dem Filialnamen und den Pfaden optional? Ist es nur zu verhindern, dass Pfade, die mit einem Bindestrich beginnen würden, als Optionen / Schalter behandelt werden?--
ist optional, aber es ist nützlicher, Konflikte mit Zweigstellennamen zu vermeiden. Bedeutet zum Beispielgit checkout -- foo
"Datei foo von HEAD auschecken" (dh lokale Änderungen in foo überschreiben , dh eine Teilmenge vongit reset --hard
),git checkout foo
könnte aber dies bedeuten oder "gehen wir zum Zweig foo ".Oder wenn Sie alle Dateien aus einem anderen Zweig möchten:
quelle
.
macht einen großen Unterschied: Anstatt in einen anderen Zweig zu wechseln, werden alle Dateien von dort kopiert, während Sie weiterhin auf dem aktuellen Zweig bleiben. Sie erhalten Inhalte aus anderen Branchen, ohne darauf einzugehen.Überprüfen Sie die Datei auf Github und ziehen Sie sie von dort
Dies ist ein pragmatischer Ansatz, der das OP nicht direkt beantwortet, aber einige haben sich als nützlich erwiesen:
Wenn sich der betreffende Zweig auf GitHub befindet, können Sie mit einem der vielen von GitHub angebotenen Tools zum gewünschten Zweig und zur gewünschten Datei navigieren, dann auf "Raw" klicken, um den Nur-Text anzuzeigen, und den Text (optional) kopieren und einfügen als erwünscht.
Ich mag diesen Ansatz, weil Sie damit die Remote-Datei in ihrer Gesamtheit betrachten können, bevor Sie sie auf Ihren lokalen Computer ziehen.
quelle
Wenn Sie die Datei von einem bestimmten Commit (einem beliebigen Zweig) erhalten möchten, sagen Sie 06f8251f
git checkout 06f8251f path_to_file
Zum Beispiel in Windows:
git checkout 06f8251f C: \ A \ B \ C \ D \ file.h.
quelle
Eine andere Möglichkeit besteht darin, einen Patch mit den Unterschieden zu erstellen und ihn beispielsweise im Hauptzweig anzuwenden. Angenommen, das letzte Commit, bevor Sie mit der Arbeit an app.js begonnen haben, ist 00000aaaaa, und das Commit mit der gewünschten Version ist 00000bbbbb
Das führen Sie im Experimentzweig aus:
Dadurch wird eine Datei mit allen Unterschieden zwischen diesen beiden Commits für app.js erstellt, die Sie anwenden können, wo immer Sie möchten. Sie können diese Datei überall außerhalb des Projekts aufbewahren
Dann rennst du im Master einfach:
Jetzt sehen Sie die Änderungen in den Projekten so, als hätten Sie sie manuell vorgenommen.
quelle
Hoffe das wird dir helfen. Bitte lassen Sie es mich wissen, wenn Sie Fragen haben.
quelle