El escenario:
- Realizo algunos cambios en un solo archivo localmente y ejecuto
git add
,git commit
ygit push
- El archivo se envía al repositorio maestro de origen remoto.
- Tengo otro repositorio local que se implementa a través de Capistrano con el método "remote_cache" desde ese repositorio remoto
- Ahora no quiero implementar toda la aplicación, sino solo actualizar / retirar ese único archivo.
¿Es esto de alguna manera posible con git? No pude encontrar nada que funcionara ni pude resolverlo. Con SVN acabo de hacerlo svn up file
y listo.
git
git-checkout
foresth
fuente
fuente
git restore -s origin/master -- path/to/file
. Vea mi respuesta a continuación .Respuestas:
Es posible hacerlo (en el repositorio desplegado)
La búsqueda descargará todos los cambios recientes, pero no la incluirá en su código actual (área de trabajo).
La comprobación actualizará el árbol de trabajo con el archivo particular de los cambios descargados (
origin/master
).Al menos esto funciona para mí para esas pequeñas correcciones de errores tipográficos, donde se siente raro crear una rama, etc., solo para cambiar una palabra en un archivo.
fuente
git status
veo comoChanges to be committed:
, lo que significa que tengo que comprometerlas nuevamente. (solo señalando que quería actualizar un solo archivo intacto pero el repositorio en sí se toca en una máquina diferente)El siguiente código funcionó para mí:
fuente
fuente
git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion.bash | tar -x
me da un mensaje de error:fatal: Operation not supported by protocol.
tar
: s--to-stdout
,git archive --remote="gitolite3@<host>:<repo>" <tag> <file> | tar xf - --to-stdout
Con Git 2.23 (agosto de 2019) y el nuevo comando (aún experimental)
git restore
, visto en " ¿Cómo restablecer todos los archivos desde el directorio de trabajo pero no desde el área de preparación? ", Eso sería:La idea es:
git restore
solo trata con archivos, no con archivos y ramas como logit checkout
hace.Ver " Confundido por
git checkout
": ahí es dondegit switch
entra)codersam agrega en los comentarios :
fuente
git restore -s upstream/master -- path/to/file
Lo que puedes hacer es:
Actualice su repositorio local de git:
git fetch
Construya una sucursal local y realice el pago:
git branch pouet && git checkout pouet
Aplique la confirmación que desee en esta rama:
git cherry-pick abcdefabcdef
(abcdefabcdef es el sha1 de la confirmación que desea aplicar)
fuente
git checkout -b pouet
.O git stash (si tiene cambios) en la rama en la que se encuentra, haga clic en el maestro de extracción, obtenga los últimos cambios, tome ese archivo en su escritorio (o la aplicación completa). Mira la sucursal en la que estabas. Git stash se aplica nuevamente al estado en el que estaba, luego corrija los cambios manualmente o arrástrelo para reemplazar el archivo.
De esta manera no es tan genial, pero definitivamente funciona si ustedes no pueden resolver nada más.
fuente
Creo que he encontrado un truco fácil.
Elimine el archivo que tiene en el repositorio local (el archivo que desea actualizar desde la última confirmación en el servidor remoto)
Y luego hacer un
git pull
Debido a que el archivo se elimina, no habrá conflicto
fuente