Git Stash vs Shelve en IntelliJ IDEA/Netbeans
No estoy muy familiarizado con el shelve
aspecto de Git (EDITAR: no es un aspecto de Git, sino más bien una característica de IntelliJ IDEA shelve
).
Si stash
se utiliza para dejar de lado trabajos inacabados ¿qué es shelve
entonces? ¿Para qué lo usarías?
Por ejemplo, en Actualizar proyecto (desde el menú VCS)
uno obtendrá (en IntelliJ IDEA 2019.2)
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.
Tenías un antiguo proyecto git shelve de 2008 para aislar modificaciones en una rama, pero eso no sería muy útil hoy en día.
Como se documenta en el cuadro de diálogo de estantería de Intellij IDEA , la función " archivar y desarchivar " no está vinculada a un VCS (herramienta del sistema de control de versiones) sino al IDE mismo, 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 (segundo trimestre de 2017), ahora también puede guardar archivos individuales .
Cuando se utilizan los IDE de JetBrains con Git, "se admiten acciones de ocultación y desinstalación además de estantería y desarchivadora. Estas características tienen mucho en común; la principal diferencia está en la forma en que se generan y aplican los parches. Shelve puede operar con archivos individuales o en grupo 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."
Además de las respuestas anteriores, hay una nota importante para mí:
shelve
es una característica de los productos JetBrains (como WebStorm
, PhpStorm
, PyCharm
, etc.). Pone archivos archivados en .idea/shelf
el directorio.
stash
es una de git
opciones. Coloca archivos escondidos en el .git
directorio.
Preferiría archivar los cambios en lugar de guardarlos si no los comparto en ningún otro lugar.
El almacenamiento es una característica de git y no le brinda 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:
Como puede ver, puedo elegir especificar qué archivos/líneas incluir en mi estantería. Tenga en cuenta que no puedo hacer eso con el almacenamiento oculto.
Tenga cuidado con el uso de estantes en el IDE que pueden limitar la portabilidad de sus parches porque esos cambios no se almacenan en una carpeta .git.
Algunos enlaces útiles:
- https://www.jetbrains.com/help/idea/shelving-and-unshelving-changes.html
- https://www.jetbrains.com/help/idea/work-on-several-features-simultanefully.html
Shelf es una función de JetBrains, mientras que Stash es una función de Git para el mismo trabajo. Puede cambiar a una rama diferente sin comprometerse ni perder trabajo utilizando cualquiera de las funciones. Mi experiencia personal es usar Shelf.