Siempre tuve la impresión de que podrías darle un nombre a un alijo haciendo git stash save stashname
, que luego podrías aplicar haciendogit stash apply stashname
. Pero parece que en este caso todo lo que sucede es que stashname
se usará como la descripción del alijo.
¿No hay forma de nombrar realmente un alijo? Si no, ¿qué recomendaría para lograr una funcionalidad equivalente? Esencialmente tengo un pequeño alijo que periódicamente me gustaría aplicar, pero no quiero tener que buscar siempre git stash list
cuál es su número real de alijo.
git stash push -m stashname
es la sintaxis actual .git stash save stashname
ha quedado en desusoRespuestas:
Así es como lo haces:
¿Dónde
"my_stash"
está el nombre del alijo?Algunas cosas más útiles para saber: todas las reservas se almacenan en una pila. Tipo:
Esto mostrará una lista de todos tus escondites.
Para aplicar un alijo y eliminarlo de la pila de alijo, escriba:
Para aplicar un alijo y mantenerlo en la pila de alijo, escriba:
¿Dónde
n
está el índice del cambio oculto?fuente
git stash apply <custom-name>
git stash push -m my_stash
es la sintaxis actual .git stash save my_stash
ha quedado en desusogit stash save
está en desuso a partir de 2.15.x / 2.16, en su lugar puede usargit stash push -m "message"
Puedes usarlo así:
git stash push -m "message"
donde "mensaje" es su nota para ese alijo.
Con el fin de recuperar el alijo puede utilizar:
git stash list
. Esto generará una lista como esta, por ejemplo:Entonces simplemente usas
apply
dándole elstash@{index}
:Referencias git stash man page
fuente
push
lugar desave
sintaxis: git stash pushgit stash push
git stash apply stash@{1}
en Powershell, obtendrá unerror: unknown switch 'e'
respaldo. En su lugar, usegit stash apply --index 1
ogit stash apply 'stash@{1}'
o escape}
y{
con una marca de retroceso '.Puedes convertir un alijo en una rama si crees que es lo suficientemente importante:
de la página del manual:
Esto crea y desprotege una nueva rama llamada a
<branchname>
partir de la confirmación en la que<stash>
se creó originalmente, aplica los cambios registrados en<stash>
el nuevo árbol de trabajo e índice, luego descarta<stash>
si se completa con éxito. Cuando no<stash>
se da, se aplica el último.Esto es útil si la rama en la que ejecutó
git stash save
ha cambiado lo suficiente como para que la aplicación git stash falle debido a conflictos. Dado que el alijo se aplica encima del commit que era HEAD en el momento en que se ejecutó git stash, restaura el estado escondido originalmente sin conflictos.Más tarde, puede cambiar la base de esta nueva rama a otro lugar que sea un descendiente de donde estaba cuando se escondió.
fuente
git stash apply
)git stash push -m 'name'
trabajó.Si solo está buscando una forma liviana de guardar algunos o todos los cambios actuales de su copia de trabajo y luego volver a aplicarlos a voluntad, considere un archivo de parche:
De vez en cuando me pregunto si debería usar escondites para esto y luego veo cosas como la locura anterior y estoy contento con lo que estoy haciendo :)
fuente
Los escondites no están destinados a ser cosas permanentes como quieres. Probablemente te sirva mejor usar etiquetas en commits. Construye lo que quieres esconder. Haz un compromiso con eso. Crea una etiqueta para ese commit. Luego, retrocede tu rama hacia
HEAD^
. Ahora, cuando quieras volver a aplicar ese alijo, puedes usarlogit cherry-pick -n tagname
(-n
es--no-commit
).fuente
named commit
pasar el rato en algún lugar. La única molestia leve es que no se compromete con la selección de cereza y se mantiene en el diferencial, lo que significa que será necesario que no se registre manualmente durante la próxima confirmación.--no-stage
opción! Relacionado: stackoverflow.com/questions/32333383/…use
git stash push -m aNameForYourStash
para guardarlo. Luego, usegit stash list
para aprender el índice del alijo que desea aplicar. Luego usegit stash pop --index 0
para reventar el alijo y aplicarlo.nota: estoy usando git versión 2.21.0.windows.1
fuente
git stash {push,save}
Tengo estas dos funciones en mi
.zshrc
archivo:Usándolos de esta manera:
fuente
¿Qué hay de esto?
fuente
git stash apply stash^{/<regex>}
no funcione (no Realmente busque en la lista oculta, vea los comentarios debajo de la respuesta aceptada ).git stash list
que me muestra los escondites junto con su número de índice asociado, luego voy a 2.git stash apply 0
- donde 0 es el número de índice que habría buscado desde el primer comandoAlias
sapply = "!f() { git stash apply \"$(git stash list | awk -F: --posix -vpat=\"$*\" \"$ 0 ~ pat {print $ 1; exit}\")\"; }; f"
Uso
git sapply "<regex>"
Editar: Me quedé con mi solución original, pero veo por qué la mayoría preferiría la versión de Etan Reisner (arriba). Tan solo para el registro:
fuente
awk -F: '{print $1}'
eliminaría por completo la necesidad de sed. Además, ¿por qué envolver esto en una función? Y el uso tambiénawk -F: -vpat="$*" '$0 ~ pat {print $1}'
debería permitir soltar el grep. Aunque podría requerir citas ligeramente diferentes para el patrón.{print $1; exit}
para salir después de la primera línea coincidente.Es lamentable que
git stash apply stash^{/<regex>}
no funcione (en realidad no busca en la lista de alijo, vea los comentarios debajo de la respuesta aceptada ).Aquí hay reemplazos
git stash list
directos que buscan por expresiones regulares para encontrar el primero (el más reciente)stash@{<n>}
y luego pasarlo agit stash <command>
:Tenga en cuenta que se devuelven los códigos de resultado adecuados para que pueda usar estos comandos dentro de otros scripts. Esto se puede verificar después de ejecutar comandos con:
Solo tenga cuidado con los exploits de expansión variable porque no estaba seguro de la
--grep=$1
porción. Tal vez debería ser,--grep="$1"
pero no estoy seguro de si eso interferiría con los delimitadores de expresiones regulares (estoy abierto a sugerencias).fuente
Esta respuesta le debe mucho a Klemen Slavič. Hubiera comentado la respuesta aceptada pero todavía no tengo suficiente representante :(
También puede agregar un alias de git para encontrar la referencia de alijo y usarlo en otros alias para mostrar, aplicar, soltar, etc.
Tenga en cuenta que la razón del
ref=$( ... ); echo ${ref:-<no_match>};
patrón es que no se devuelve una cadena en blanco, lo que provocaría que sshow, sapply y sdrop apunten al último alijo en lugar de fallar como cabría esperar.fuente
Alias Esta podría ser una sintaxis más directa para sistemas tipo Unix sin necesidad de encapsular en una función. Agregue lo siguiente a ~ / .gitconfig en [alias]
Uso: sapply regex
Ejemplo: git sshow MySecretStash
El guión al final dice tomar entrada de entrada estándar.
fuente
Use un pequeño script bash para buscar el número de alijo. Llámalo "gitapply":
Uso:
... donde foo es una subcadena del nombre del alijo que deseas.
fuente
Use
git stash save NAME
para guardar.Entonces ... puede usar este script para elegir cuál aplicar (o pop):
Me gusta poder ver los nombres de los escondites y elegir. También uso Zshell y, francamente, no sabía cómo usar algunos de los alias Bash anteriores;)
Nota: Como dice Kevin, debes usar etiquetas y selecciones de cereza.
fuente
git stash save
está en desuso a favor degit stash push
.Esta es una forma de lograr esto usando PowerShell:
Más detalles aquí
fuente
en mi concha de pescado
utilizar
gsap name_of_stash
fuente
Tarde para la fiesta aquí, pero si usa VSCode, una forma rápida de hacerlo es abrir la paleta de comandos (CTRL / CMD + SHIFT + P) y escribir "Pop Stash", podrá recuperar su alijo por nombre sin la necesidad de usar git CLI
fuente
git stash apply
También funciona con otras referencias questash@{0}
. Por lo tanto, puede usar etiquetas comunes para obtener un nombre persistente. Esto también tiene la ventaja de que no se puede accidentalmentegit stash drop
ogit stash pop
ella.Entonces puede definir un alias
pstash
(también conocido como "alijo persistente") como este:Ahora puede crear un alijo etiquetado:
y
show
yapply
otra vez como de costumbre:fuente
No creo que haya una manera de hacer explotar un alijo por su nombre.
He creado una función bash que lo hace.
Ejemplo de uso:
¡Espero que ayude!
fuente
Para todo, además de la creación de alijo, propondría otra solución introduciendo fzf como una dependencia. Recomiendo tomar 5 minutos de su tiempo y conocerlo, ya que es un gran refuerzo de productividad.
De todos modos, un extracto relacionado de su página de ejemplos que ofrece búsquedas ocultas. Es muy fácil cambiar el scriptlet para agregar funcionalidad adicional (como la aplicación oculta o la caída):
fuente
Entonces, no estoy seguro de por qué hay tanta consternación sobre este tema. Puedo nombrar un escondite de git con un empuje y el guardado en desuso, y puedo usar una expresión regular para recuperarlo con una aplicación:
Método de almacenamiento Git para usar un nombre para aplicar
Como se mencionó anteriormente, el comando guardar está en desuso, pero aún funciona, por lo que puede usarlo en sistemas más antiguos donde no puede actualizarlos con una llamada de inserción. A diferencia del comando push, el modificador -m no se requiere con save.
Este es Git 2.2 y Windows 10.
Prueba visual
Aquí hay un hermoso GIF animado que demuestra el proceso.
Secuencia de eventos
El GIF se ejecuta rápidamente, pero si nos fijamos, el proceso es el siguiente:
¿Esto tiene sentido?
Para ser sincero, no estoy seguro de cuál es el beneficio de este enfoque. Tiene valor darle un nombre al alijo, pero no la recuperación. Tal vez escribir el proceso de archivar y dejar de lado sería útil, pero aún así es mucho más fácil simplemente abrir un alijo por nombre.
Eso me parece mucho más fácil que la expresión regular.
fuente