¿Debo usar git stash para guardar los cambios continuos de mi proyecto y llevarlo a github para acceder a otras computadoras?

20

Muy a menudo trabajo en algunas características de mi proyecto que necesito tomar un descanso antes de que sea lo suficientemente bueno para una confirmación. Sin embargo, uso diariamente dos computadoras diferentes para codificar (mi computadora portátil y el escritorio de mi laboratorio de investigación). Por ejemplo: estoy trabajando en una función en casa, luego me detengo y voy a mi laboratorio.

No quiero mezclar la sincronización en la nube (por ejemplo, Dropbox) con el seguimiento remoto de GitHub.

Simplemente cometí estados inacabados (y desordenados) de mi código antes (y lo presioné) solo con el propósito de tirar de eso en la otra computadora para continuar el trabajo. Estoy bastante seguro de que esta es una mala práctica.

Hoy, sin embargo, me encontré git stashdespués de buscar en Google un poco. Parece la solución perfecta para lo que necesito.

Sin embargo, la documentación no dice si va a github una vez que presiono mis cambios. Además de eso, quiero saber si hay una manera más eficiente de lograr la movilidad que necesito.

¡Gracias por adelantado!

Leandro
fuente
1
Estoy votando para cerrar esta pregunta como fuera de tema porque ya ha sido respondida en Stack Overflow
David Arno
55
@DavidArno: No creo que sea un duplicado entre sitios. La pregunta de StackOverflow es sobre "¿Puedo hacer X" y esta es sobre "Es X una buena práctica". Por lo menos, la causa raíz de la pregunta es diferente.
Greg Burghardt
77
@DavidArno lo último que revisé, "Ya respondí en SO" no es una razón para cerrar una pregunta.
RubberDuck

Respuestas:

28

Simplemente cometí estados inacabados (y desordenados) de mi código antes (y lo presioné) solo con el propósito de tirar de eso en la otra computadora para continuar el trabajo. Estoy bastante seguro de que esta es una mala práctica.

Está bien cometer un trabajo desordenado e inacabado. Haz tu trabajo en una rama temática. Comprometerse temprano y comprometerse a menudo. Lea sobre cuándo comprometer el código? para algunas pautas sobre cuándo realizar un compromiso. Específicamente para Git, comprométete con una rama de tema y presiona con la frecuencia que quieras.

Si esta rama del tema es solo para usted, confirme y envíe un código roto. Sólo debe diferir de empujar código rota a una rama que es utilizada por otras personas. Siéntase libre de descifrar su propio código.

Greg Burghardt
fuente
66
Incluso lo diría más fuerte: nunca trabajes en la rama maestra, siempre usa una rama temática. Comprométete con él como mejor te parezca, empújalo sin miedo. Cuando estés satisfecho con los cambios, combínalo para dominarlo.
9000
¡Buen consejo! Creo que la gran confusión puede suceder porque necesitamos agregar un comentario a una confirmación, y a veces será literalmente algo así como "tarea en progreso" o algo así. Y sí, estoy trabajando solo en esta rama, ¡así que todo lo que dijiste tiene sentido!
Leandro
44
Esto también le da la opción de aplastar los commits individuales en uno al fusionar su rama git merge --squash bugfix
snoopy
2
Los mensajes de confirmación de @Leandro deben ser tan atómicos y claros como tenga sentido. Por ejemplo, incluso si es WIP puede decir, por ejemplo, "Agregar controlador para manejar solicitudes de página - WIP". Los mensajes de confirmación también proporcionan un historial de búsqueda de los cambios realizados en el proyecto. Diez confirmaciones de "WIP" no ayudarían, por ejemplo, a cualquiera que busque un cambio relacionado con el manejo de usuarios.
Ben
7

Los escondites están destinados para el uso local, como un lugar temporal para guardar cosas mientras juegas con las ramas.

Si usted es el único que trabaja en una sucursal, no hay ningún problema en cometer un código roto. Lo que hago cuando en situaciones similares es hacer un commit roto, luego, después de tirar de él en la otra ubicación, hacer un git reset HEAD~1para deshacerlo. Por supuesto, esto requiere usarlo --forceen pullsy pushescuando cambie de ubicación.

O simplemente espero hasta mi primer compromiso y hago un git commit --amend. O simplemente elimino todas las confirmaciones rotas cuando confirmo la rama de características. O simplemente no me preocupo por algunos commits rotos claramente marcados en mi historia, porque tiendo a no irme hasta que esté en un buen lugar de parada. Hay muchas opciones.

Karl Bielefeldt
fuente
1
Sin embargo, no recomendaría acostumbrarse, por --amendlo que requiere --forceempujones. Es mejor comprometerse solo con una rama de usar y tirar.
Leftaroundabout
1

stashno es realmente satisfactorio para nada más que limpiar su directorio de trabajo para "desatascar su rama"; Si no se stash popvuelve inmediatamente al estado, las cosas se volverán muy confusas.

Si hay trabajo real para guardar, incluso si no es bueno para una entrada de repositorio permanente, aún debería ser una confirmación. De hecho, nunca dejo mi directorio de trabajo en un estado que no está bajo el control de la versión: uso algunos scripts Python muy simples para guardar cada cambio como una confirmación temporal. Si quieres probarlo, esto es lo que debes hacer:

  1. Cuando haya realizado un trabajo inacabado y esté a punto de abandonar el lugar de trabajo, ejecute git-tmp-commit. Confirmará automáticamente todos los cambios en una rama nueva y única.
  2. Empuje esta rama al control remoto.
  3. Salir.
  4. Cuando quiera continuar, clone esa rama nuevamente desde el control remoto. Hago esto con el ccdscript, que en realidad verifica todo desde cero hasta una carpeta temporal , eligiendo automáticamente la rama más reciente ... pero también puede buscar y extraer manualmente la rama temporary-commits/original-branch/YYYY-MM-DD...de un clon existente del repositorio.
  5. Finalmente, "deshaga" los cambios con git-tmp-commit -r. Esto lo llevará de regreso a la rama original (p master. Ej. ) Y dejará los cambios de la confirmación temporal en el directorio de trabajo, para que pueda continuar aquí hasta que sea la hora de una confirmación adecuada (o temporal, si tiene que irse nuevamente).

La forma en que se escribe el guión en este momento, esto solo funciona si no hay una rama masteren el repositorio de pago . Entonces, en caso de duda, tendrías que hacerlo git branch -d master; esto obviamente no es realmente ideal ...

a la izquierda
fuente