¿Cómo puedo compartir un alijo git?

32

¿Hay alguna manera de compartir un alijo en git?

Trabajo en varias máquinas, y a menudo quiero poder mover mi estado de trabajo actual de una a otra.

Estoy buscando una manera de empujar / tirar un alijo de un clon a otro, y hacer que aparezca como el alijo del otro clon, o como una rama remota aparente. Sin embargo, no espero que lo primero funcione necesariamente si el control remoto ya tiene su propio alijo.

Dado que el alijo es, en efecto, ya una rama con compromisos (aparentemente), no estoy buscando soluciones en la línea de "comprometer cada alijo a una rama y luego compartirlas". Ya tengo muchas, muchas ramas Por lo tanto, estoy buscando el refspec o similar que pueda usar para controlar el empuje / tracción.

PeterJCLaw
fuente

Respuestas:

26

El alijo es justo stasho refs/stash, que puede empujar a una rama remota:

git push origin stash@{2}:refs/heads/otherstash

refs/stashSin embargo, Git se negará a empujar directamente a . Además, no parece haber una manera de empujar registros completos , donde se almacenan las reservas anteriores.

Gravedad
fuente
66
git push origin $(for sha in $(git rev-list -g stash); do echo $sha:refs/heads/stash_$sha; done)debería funcionar bien para todos los escondites; Ver también stackoverflow.com/a/5248758/85371
sehe
11

No está tan bien integrado como git pushpara evitar crear ramas, lo uso git stash show -p > change.patch(después de guardar los cambios) o incluso git diff --cached > change.patchpara crear un parche que utilizo git apply change.patchen la próxima máquina desde la que trabajo.

Al menos con esta solución, si se alteran muchos archivos en su estado de trabajo actual, todo está contenido en una sola unidad de datos.

Neo
fuente
Si pero como ? git stash -p solo me pregunta interactivamente sobre cada trozo, luego escupe una larga línea que no entiendo. ¿Dónde está ese "parche" que puedo llevar conmigo a otra máquina? y que es el git diff-cache? y como usas git apply? ¿Puedes elaborar un poco más por favor?
Motti Shneor
Detallé y corregí mi respuesta
Neo
4

Puedes hacer un parche y enviárselo a alguien. lo que tienen que hacer es aplicarlo.

git diff >> file.diff

fuente
3
Tenga en cuenta que esto solo funcionará para los objetos que generan un diff; cuidado con "Los archivos binarios difieren" en la salida.
Liam