Come ottenere un solo file da un altro ramo

Sto usando git e lavorando sul ramo principale. Questo ramo ha un file chiamato app.js

Ho un ramo experiment in cui ho apportato un sacco di cambiamenti e tonnellate di commit. Ora voglio portare tutte le modifiche apportate solo ad app.js experiment al ramo master .

Come lo faccio?

Ancora una volta non voglio unire. Voglio solo apportare tutte le modifiche in app.js dal ramo experiment al ramo master .

 git checkout master # first get back to master git checkout experiment -- app.js # then copy the version of app.js # from branch "experiment" 

Vedi anche come annullare le modifiche di un file?

Come dice Jakub Narębski nei commenti:

 git show experiment:path/to/app.js > app.js 

funziona anche, tranne che, come dettagliato nella domanda SO ” Come recuperare un singolo file da una revisione specifica in Git? “, è necessario utilizzare il percorso completo dalla directory principale del repository.
Da qui il percorso / per / app.js usato da Jakub nel suo esempio.

Come Frosty menziona nel commento:

riceverai solo lo stato più recente di app.js

Ma, per git checkout o git show , puoi effettivamente fare riferimento a qualsiasi revisione che desideri, come illustrato nella domanda SO ” revisione checkout git di un file in git gui “:

 $ git show $REVISION:$FILENAME $ git checkout $REVISION -- $FILENAME 

sarebbe lo stesso è $ FILENAME è un percorso completo di un file con versione.

$REVISION può essere come mostrato in git rev-parse :

 [email protected]{yesterday}:app.js # app.js as it was yesterday experiment^:app.js # app.js on the first commit parent [email protected]{2}:app.js # app.js two commits ago 

e così via.

Tutto è molto più semplice, usa git checkout per questo.

Supponiamo che you're on master ramo you're on master , per ottenere app.js from new-feature ramo di app.js from new-feature :

 git checkout new-feature path/to/app.js // note that there is no leading slash in the path! 

Questo ti porterà il contenuto del file desiderato. Come sempre, puoi usare parte di sha1 invece del nome di una nuova feature per ottenere il file così com’era in quel particolare commit.

Supplementare alle VonC e alle risposte di chhh.

 git show experiment:path/to/relative/app.js > app.js # If your current working directory is relative than just use git show experiment:app.js > app.js 

o

 git checkout experiment -- app.js 
 git checkout branch_name file_name 

Esempio:

 git checkout master App.java 

O se vuoi tutti i file da un altro ramo:

 git checkout  -- .