El escenario:
- Realizo algunos cambios en un solo archivo localmente y ejecuto
git add,git commitygit 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 filey 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 statusveo 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 -xme 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-stdoutCon 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 restoresolo trata con archivos, no con archivos y ramas como logit checkouthace.Ver " Confundido por
git checkout": ahí es dondegit switchentra)codersam agrega en los comentarios :
fuente
git restore -s upstream/master -- path/to/fileLo que puedes hacer es:
Actualice su repositorio local de git:
git fetchConstruya una sucursal local y realice el pago:
git branch pouet && git checkout pouetAplique 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 pullDebido a que el archivo se elimina, no habrá conflicto
fuente