Pregunta Cómo obtener solo un archivo de otra rama


Estoy usando git y estoy trabajando en la rama principal. Esta rama tiene un archivo llamado app.js.

Yo tengo un experiment rama en la que hice un montón de cambios y toneladas de compromisos. Ahora quiero traer todos los cambios hechos solo para app.js de experiment a master rama.

¿Cómo puedo hacer eso?

Una vez más, no quiero una fusión. Solo quiero traer todos los cambios en app.js de experiment rama a master rama.


821
2018-03-02 15:15


origen


Respuestas:


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

Ver también git cómo deshacer cambios de un archivo?

Como Jakub Narębski menciona en los comentarios:

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

funciona también, excepto que, como se detalla en la pregunta SO "¿Cómo recuperar un único archivo de una revisión específica en Git?", debe usar la ruta completa desde el directorio raíz del repositorio.
De ahí el camino / a / app.js usado por Jakub en su ejemplo.

Como Escarchado menciona en el comentario:

solo obtendrá el estado más reciente de app.js

Pero para git checkout o git show, puede hacer referencia a cualquier revisión que desee, como se ilustra en la pregunta SO "git checkout revisión de un archivo en git gui":

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

sería lo mismo es $ FILENAME es una ruta completa de un archivo versionado.

$REVISION puede ser como se muestra en git rev-parse:

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

y así.


1071
2018-03-02 15:23



Todo es mucho más simple, usa git checkout para eso.

Suponer you're on master rama, para obtener app.js from new-feature rama hacer:

git checkout new-feature path/to/app.js

// note that there is no leading slash in the path!

Esto le traerá el contenido del archivo deseado. Puedes, como siempre, usar parte de sha1 en lugar de  nueva caracteristica  nombre de la rama para obtener el archivo como estaba en esa confirmación particular.


235
2018-04-05 08:48



Complementario a las respuestas de VonC y 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

26
2017-12-08 02:22



O si desea todos los archivos de otra sucursal:

git checkout <brachname> -- .

4
2018-02-02 18:51



git checkout branch_name file_name

Ejemplo:

git checkout master App.java

4
2018-05-11 09:43