Git Shelve vs Stash

276

No estoy muy familiarizado con el shelveaspecto de Git. Si stashse utiliza para dejar de lado el trabajo inacabado, ¿qué es shelveentonces? ¿Para qué lo usarías?

Por ejemplo, en Proyecto de actualización (desde el menú VCS)

ingrese la descripción de la imagen aquí

uno obtendrá (en Idea 2019.2)

ingrese la descripción de la imagen aquí

Edgar Martinez
fuente
14
shelveNo es un comando git. ¿Cuál es el contexto para esta pregunta, de dónde provienen estos términos? shelveexiste en algunas otras herramientas pero no es parte de git.
Jonás
2
Git stash es similar a shelvebzr, hg, etc. ¿Se refiere a algún paquete de interoperabilidad git?
drRobertz
3
más upvotes que la respuesta aceptada probablemente confirma, esta pregunta es válida y el término '' Shelve" se entiende mal igualmente como un comando git Gracias por preguntar, esto era mi duda también (desde la idea también)..
PravyNandas

Respuestas:

268

git shelve no existe en Git.

Solo git stash:

  • cuando desea registrar el estado actual del directorio de trabajo y el índice, pero desea volver a un directorio de trabajo limpio.
  • lo que guarda sus modificaciones locales y revierte el directorio de trabajo para que coincida con la confirmación HEAD.

Usted tuvo un 2008 antiguo proyecto Git dejar de lado a las modificaciones del aislante en una rama, pero eso no sería muy útil hoy en día.

Como se documenta en el cuadro de diálogo de Intellij IDEA , la función " dejar de lado " no está vinculada a un VCS (herramienta del sistema de control de versiones) sino al IDE en sí, para almacenar temporalmente los cambios pendientes que aún no ha confirmado en la lista de cambios.

Tenga en cuenta que desde Git 2.13 (Q2 2017), ahora también puede guardar archivos individuales .

VonC
fuente
74
Resulta que entendí mal el concepto. Pensé que era un comando Git cuando, de hecho, es una cosa de terceros de IntelliJ IDEA. No pude encontrar los documentos de git para eso, así que pensé que me faltaba algo. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez
2
Su enlace de documentación indica que los "estantes" son un conjunto de cambios (parches) administrados solo por IntelliJ IDE, desvinculan "escondites" que son cosas estándar administradas por Git. Así que evite los estantes.
barbara.post
2
@jerry chin shelve es mejor que esconder en tu caso. Desearía si estantería estuviera presente en git. Webstorm absorbe la RAM. Sería útil si git lo tuviera, podríamos ejecutarlo en línea cmd
digender mahara
2
Hay un caso de uso común que la estantería tiene que el alijo no aborda: tratar con prácticas problemáticas de compañeros de trabajo / empresa. Es posible que se agregue basura completa a su repositorio y que no sea kosher 'arreglarla' debido a la locura de alguien. La alternativa es algo así git stash && <your actual command> && git stash poppero eso apesta. La opción de archivar y aplicar automáticamente está más cerca de lo que necesitamos.
smaudet
1
@VonC similar no es lo mismo: tengo un caso de uso en el que los proyectos que estoy usando tienen configuraciones que requiero que no pueden confirmarse porque 'no son estándar'. Y media docena de otros casos de uso que he encontrado involucran cosas como la necesidad de modificar archivos de compilación, etc. para el desarrollo local frente a dev / test / prod.
smaudet
187

Cuando se utilizan IDE de JetBrains con Git, "se admiten acciones de almacenamiento y desarmado además de archivar y desarmar. Estas características tienen mucho en común; la principal diferencia está en la forma en que se generan y aplican parches. Shelve puede operar con archivos individuales o agrupados de archivos, mientras que Stash solo puede operar con un montón de archivos modificados a la vez. Aquí hay más detalles sobre las diferencias entre ellos ".

Yekver
fuente
10
Parece que estantería es más flexible que git stash .
Dmitry Davydov
12
@DmitryDavydov Hay lo git stash -pque triunfa sobre ambos. Lamentablemente solo en la línea de comando.
The Vee
1
@TheVee sí, es muy similar a dejar de lado en términos de funcionalidad, gracias por la información.
Dmitry Davydov
10
En realidad, desde Git 2.13 (Q2 2017) puede guardar archivos individuales ... lea más
kyb
55
Encontré a Shelve muy útil cuando tienes un parche de cambios que quieres aplicar cada vez que quieres generar automáticamente documentación, por ejemplo. Shelve creará un archivo dentro de .idea / shelve y puede agregarlo a su VCS y compartirlo con todo su equipo para que puedan aplicar esos cambios y ejecutar las mismas tareas.
ingkevin
64

Además de las respuestas anteriores, hay una nota importante para mí:

shelvees JetBrains productos característica (tales como WebStorm, PhpStorm, PyCharm, etc.). Pone los archivos archivados en el .idea/shelfdirectorio.

stashEs una de las gitopciones. Pone los archivos escondidos en el .gitdirectorio.

valex
fuente
3
Gracias por aclarar esta pregunta crítica.
AmerllicA
6

Preferiría archivar los cambios en lugar de esconderlos si no estoy compartiendo mis cambios en otro lugar.

El ocultamiento es una característica de git y no le da la opción de seleccionar archivos específicos o cambios dentro de un archivo. Shelving puede hacer eso, pero esta es una característica específica de IDE, no una característica de git:

ingrese la descripción de la imagen aquí

Como puede ver, puedo elegir especificar qué archivos / líneas incluir en mi estantería. Tenga en cuenta que no puedo hacer eso con alijo.

Tenga cuidado con el uso de estantes en el IDE puede limitar la portabilidad de sus parches porque esos cambios no se almacenan en una carpeta .git.

Algunos enlaces útiles:

Hamza Belmellouki
fuente