tipos tag repositorio origin example etiquetas eliminar crear git git-stash

repositorio - git push tag



¿Es posible enviar un alijo de git a un repositorio remoto? (9)

AFAIK la idea de esconder es esconder algo que no es tan importante bajo la alfombra local . Nadie debería saber acerca de su basura favorita ;-) El único "pero" es: ¿Pero si me desarrollo en un par de estaciones de trabajo? Entonces scp es mucho mejor.

En git, ¿es posible crear un alijo, enviar el alijo a un depósito remoto, recuperar el alijo en otra computadora y aplicar el alijo?

¿O son mis opciones?

  • Crea un parche y copia el parche a la otra computadora, o
  • Crear una rama menor y comprometer el trabajo incompleto a esa rama?

Es un poco tarde, pero esta respuesta podría ayudar a alguien. Quería saber esto porque quería poder insertar una característica en progreso / error / lo que sea y trabajar desde el mismo punto en otra computadora.

Lo que funciona para mí es comprometer mi código en progreso (en una rama en la que estoy trabajando solo). Cuando llegue a mi otra computadora, haga un pull, luego deshaga la confirmación con:

git reset --soft HEAD^

Continúe trabajando como estaba, con todos sus cambios en progreso allí, sin compromiso y sin instancia.

Espero eso ayude.


Llego un poco tarde a la fiesta, pero creo que encontré algo que me funciona con respecto a esto y también podría serlo si sus circunstancias son las mismas o similares.

Estoy trabajando en una función en su propia rama. La rama no se fusionó con la maestra y se presionó hasta que finalizó o realicé confirmaciones que me siento cómodo mostrando al público. Entonces, lo que hago cuando quiero transferir cambios sin etapas a otra computadora es:

  • Realice una confirmación, con un mensaje de confirmación como " [non-commit] FOR TRANSFER ONLY ", con el contenido que desea transferir.
  • Ingresa a la otra computadora.
  • Entonces hazlo:

    git pull ssh+git://<username>@<domain>/path/to/project/ rb:lb

    La URL puede diferir para usted si accede a su repositorio de una manera diferente. Esto generará cambios desde esa URL desde la rama remota "rb" a la rama local "lb". Tenga en cuenta que tengo un servidor ssh ejecutándose en mi propia computadora, y puedo acceder al repositorio de esa manera.

  • git reset HEAD^ (implica --mixed )

    Esto restablece el CABEZAL para apuntar al estado antes de la confirmación "[no comprometer]".

Desde git-reset (1): " --mixed : restablece el índice pero no el árbol de trabajo (es decir, los archivos modificados se conservan pero no se marcan para commit) [...]"

Por lo tanto, al final tendrá sus cambios en los archivos, pero no se realizan confirmaciones para dominar y no es necesario un alijo.

Sin embargo, esto requerirá que git reset --hard HEAD^ en el repositorio en el que hiciste el "[non-commit]", ya que ese commit es basura.


Lo siguiente no funciona con el alijo, pero con los cambios no confirmados en el directorio de trabajo. Crea una bifurcación, confirma automáticamente todos los cambios actuales y empuja al control remoto:

commit_and_push_ ( ) { # This will: # 1. checkout a new branch stash-XXX # 2. commit the current changes in that branch # 3. push the branch to the remote local locbr=${1:-autostash-XXX} git checkout -b $locbr git add . git commit -a -m "Automatically created commit" git push origin $locbr echo "Autocommitted changes in branch $locbr ..." }

Use como:

commit_and_push_ my-temp-branch commit_and_push_


Me gustaría ir con un segundo enfoque, aunque no tengo idea de por qué no puedes comprometerlo con la rama maestra / presentada. También es posible hacer cherry-picking.


Parece que hay un truco muy bueno para resolver esto. puede usar git diff > file.diff (y confirmar el archivo), luego restaure los cambios usando git apply file.diff (desde cualquier lugar) para lograr el mismo resultado.

Esto fue explicado here también.



Nota: Acabo de reescribir esta respuesta con 24 horas más de git-fu bajo mi cinturón :) En mi historia de shell, todo el shebang ahora es de tres líneas. Sin embargo, los he descondensado para su conveniencia.

De esta manera, espero que puedas ver cómo hice las cosas, en lugar de tener que copiar / pegar cosas a ciegas.

Aquí está paso por paso.

Supongamos que la fuente está en ~ / OLDREPO que contiene depósitos. Crea un clon de TEST que no contenga escondites:

cd ~/OLDREPO git clone . /tmp/TEST

Empuje todos los stashes como ramas temp:

git send-pack /tmp/TEST $(for sha in $(git rev-list -g stash); / do echo $sha:refs/heads/stash_$sha; done)

Bucle en el extremo receptor para transformar nuevamente en stashes:

cd /tmp/TEST/ for a in $(git rev-list --no-walk --glob=''refs/heads/stash_*''); do git checkout $a && git reset HEAD^ && git stash save "$(git log --format=''%s'' -1 HEAD@{1})" done

Limpia tus ramas temporales si quieres

git branch -D $(git branch|cut -c3-|grep ^stash_)

Haz una lista secreta de git y harás algo como esto:

stash@{0}: On (no branch): On testing: openmp import stash@{1}: On (no branch): On testing: zfsrc stash@{2}: On (no branch): WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue stash@{3}: On (no branch): WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{4}: On (no branch): WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{5}: On (no branch): WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{6}: On (no branch): WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{7}: On (no branch): WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{8}: On (no branch): WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{9}: On (no branch): WIP on emmanuel: bee6660 avoid unrelated changes

En el repositorio original, el mismo parecía

stash@{0}: WIP on emmanuel: bee6660 avoid unrelated changes stash@{1}: WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{2}: WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{3}: WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{4}: WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{5}: WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{6}: WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{7}: WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue #57) stash@{8}: On testing: zfsrc stash@{9}: On testing: openmp import


No es posible obtenerlo a través de fetch, el espejo refspec es fetch = +refs/*:refs/* , y aunque el escondite es refs/stash , no se envía. ¡Un refs/stash:refs/stash explícito refs/stash:refs/stash tampoco tiene efecto!

De todos modos, solo sería confuso, ya que no obtendría todos los stashes, solo el último; la lista de stashes es el reflog de ref refs refs/stashes .