Introducci贸n a Git

1

驴Por qu茅 usar un sistema de control de versiones como Git?

2

驴Qu茅 es Git?

3

Instalando GitBash en Windows

4

Instalando Git en OSX

5

Instalando Git en Linux

6

Editores de c贸digo, archivos binarios y de texto plano

7

Introducci贸n a la terminal y l铆nea de comandos

Comandos b谩sicos en Git

8

Crea un repositorio de Git y haz tu primer commit

9

Analizar cambios en los archivos de tu proyecto con Git

10

驴Qu茅 es el staging?

11

驴Qu茅 es branch (rama) y c贸mo funciona un Merge en Git?

12

Volver en el tiempo en nuestro repositorio utilizando reset y checkout

13

Git reset vs. Git rm

Flujo de trabajo b谩sico en Git

14

Flujo de trabajo b谩sico con un repositorio remoto

15

Introducci贸n a las ramas o branches de Git

16

Fusi贸n de ramas con Git merge

17

Resoluci贸n de conflictos al hacer un merge

Trabajando con repositorios remotos en GitHub

18

C贸mo funcionan las llaves p煤blicas y privadas

19

Configura tus llaves SSH en local

20

Uso de GitHub

21

Cambios en GitHub: de master a main

22

Tu primer push

23

Git tag y versiones en Github

24

Manejo de ramas en GitHub

25

Configurar m煤ltiples colaboradores en un repositorio de GitHub

Flujos de trabajo profesionales

26

Flujo de trabajo profesional: Haciendo merge de ramas de desarrollo a master

27

Flujo de trabajo profesional con Pull requests

28

Utilizando Pull Requests en GitHub

29

Creando un Fork, contribuyendo a un repositorio

30

Haciendo deployment a un servidor

31

Hazme un pull request

32

Ignorar archivos en el repositorio con .gitignore

33

Readme.md es una excelente pr谩ctica

34

Tu sitio web p煤blico con GitHub Pages

Multiples entornos de trabajo en Git

35

Git Rebase: reorganizando el trabajo realizado

36

C贸mo usar Git Stash: guarda cambios temporalmente

37

Git Clean: limpiar tu proyecto de archivos no deseados

38

Git cherry-pick: traer commits antiguos al head del branch

Comandos de Git para casos de emergencia

39

Git Reset y Reflog: 煤sese en caso de emergencia

40

Reconstruir commits en Git con amend

41

Buscar en archivos y commits de Git con Grep y log

Bonus sobre Git y Github

42

Comandos y recursos colaborativos en Git y GitHub

43

Tu futuro con Git y GitHub

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

C贸mo usar Git Stash: guarda cambios temporalmente

36/43
Recursos

El comando聽git stash聽te permite almacenar temporalmente (o guardar en un stash), los cambios que hayas efectuado en el c贸digo en el que est谩s trabajando para que puedas trabajar en otra cosa y, m谩s tarde, regresar y volver a aplicar los cambios.

Guardar los cambios en stashes resulta pr谩ctico si tienes que cambiar r谩pidamente de contexto y ponerte con otra cosa, pero est谩s en medio de un cambio en el c贸digo y no tienes todo listo para confirmar los cambios.

Git stash lo puedes usar sin necesidad de crear una nueva rama o hacer un commit. Adem谩s, no pierdes tus cambios.

  • git stash: guarda los cambios temporalmente en memoria cuando no quieres hacer un commit aun
  • git stash save 鈥渕ensaje鈥: guarda un stach con mensaje
  • git stash list: muestra la lista de cambios temporales
  • git stash pop: trae de vuelta los cambios que ten铆amos guardados en el ultimo stash
  • git stash apply stash@{n}: trae el stash que necesites con indicar su n煤mero dentro de las llaves
  • git stash drop: borra el ultimo stash
  • git stash clear: borra todos los stash

C贸mo funciona el comando git stash

Para agregar los cambios al stash se utiliza el comando:

git stash

Podemos poner un mensaje en el stash, para as铆 diferenciarlos en 鈥済it stash list鈥 por si tenemos varios elementos en el stash. Esto con:

git stash save "mensaje identificador del elemento del stashed"

Ejemplo de uso de git stash

El stashed nos permite cambiar de rama o branch, hacer cambios, trabajar en otras cosas y, m谩s adelante, retomar el trabajo con los archivos que ten铆amos en staging, pero que podemos recuperar, ya que los guardamos en el stash.

Por ejemplo:

$ git status
On branch master
Changes to be committed:

    new file:   style.css

Changes not staged for commit:

    modified:   index.html

$ git stash
Saved working directoryandindex state WIP onmaster: 5002d47 our new homepage
HEADisnowat5002d47 our new homepage

$ git status
On branch master
nothingtocommit, working tree clean

C贸mo ver los stash en git

Utiliza git stash pop. Este muestra los cambios guardados en el stash, tambi茅n podemos mostrar los cambios de un stash determinado usando su 铆ndice que nos muestra el git stash.

El stashed se comporta como una聽stack聽de datos comport谩ndose de manera tipo聽LIFO聽(del ingl茅s聽Last In, First Out, 芦煤ltimo en entrar, primero en salir禄), as铆 podemos acceder al m茅todo pop.

El m茅todo聽pop聽recuperar谩 y sacar谩 de la lista el聽煤ltimo estado del stashed聽y lo insertar谩 en el聽staging area, por lo que es importante saber en qu茅 branch te encuentras para poder recuperarlo, ya que el stash ser谩聽agn贸stico a la rama o estado en el que te encuentres. Siempre recuperar谩 los cambios que hiciste en el lugar que lo llamas.

Para recuperar los 煤ltimos cambios desde el stash a tu staging area utiliza el comando:

git stash pop

Para aplicar los cambios de un stash espec铆fico y eliminarlo del stash:

git stash pop stash@{<num_stash>}

Para retomar los cambios de una posici贸n espec铆fica del stash puedes utilizar el comando:

git stash apply stash@{<num_stash>}

Donde el聽<num_stash>聽lo obtienes desde el聽git stash list

C贸mo ver el listado de elementos en el stash

Para ver la lista de cambios guardados en stash y as铆 poder recuperarlos o hacer algo con ellos podemos utilizar el comando:

git stash list

Retomar los cambios de una posici贸n espec铆fica del Stash || Aplica los cambios de un stash espec铆fico.

C贸mo crear una rama con el stash

Para crear una rama y aplicar el stash m谩s reciente podemos utilizar el comando:

git stash branch <nombre_de_la_rama>

Si deseas crear una rama y aplicar un stash espec铆fico (obtenido desde聽git stash list) puedes utilizar el comando:

git stash branch nombre_de_rama stash@{<num_stash>}

Al utilizar estos comandos聽crear谩s una rama聽con el nombre聽<nombre_de_la_rama>, te pasar谩s a ella y tendr谩s el聽stash especificado聽en tu聽staging area.

C贸mo eliminar elementos del stash

Para eliminar los cambios m谩s recientes dentro del stash (el elemento 0), podemos utilizar el comando:

git stash drop

Pero si, en cambio, conoces el聽铆ndice聽del stash que quieres borrar (mediante聽git stash list) puedes utilizar el comando:

git stash drop stash@{<num_stash>}

Donde el聽<num_stash>聽es el聽铆ndice聽del cambio guardado.

Si, en cambio, deseas eliminar todos los elementos del stash, puedes utilizar:

git stash clear

Consideraciones:

  • El cambio m谩s reciente (al crear un stash)聽SIEMPRE聽recibe el valor 0 y los que estaban antes aumentan su valor.
  • Al crear un stash tomar谩 los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al staging area con git add [nombre_archivo] con la intenci贸n de que git tenga un seguimiento de ese archivo. O tambi茅n utilizando el comando git stash -u (que guardar谩 en el stash los archivos que no est茅n en el staging).
  • Al aplicar un stash este no se elimina, es buena pr谩ctica eliminarlo.

Contribuci贸n creada con los aportes de: David Behar y Daniel Cabrera Ramirez.

Aportes 409

Preguntas 41

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Stashed:

El stashed nos sirve para guardar cambios para despu茅s, Es una lista de estados que nos guarda algunos cambios que hicimos en Staging para poder cambiar de rama sin perder el trabajo que todav铆a no guardamos en un commit

脡sto es especialmente 煤til porque hay veces que no se permite cambiar de rama, 茅sto porque porque tenemos cambios sin guardar, no siempre es un cambio lo suficientemente bueno como para hacer un commit, pero no queremos perder ese c贸digo en el que estuvimos trabajando.

El stashed nos permite cambiar de ramas, hacer cambios, trabajar en otras cosas y, m谩s adelante, retomar el trabajo con los archivos que ten铆amos en Staging pero que podemos recuperar ya que los guardamos en el Stash.

git stash

El comando git stash guarda el trabajo actual del Staging en una lista dise帽ada para ser temporal llamada Stash, para que pueda ser recuperado en el futuro.

Para agregar los cambios al stash se utiliza el comando:

git stash

Podemos poner un mensaje en el stash, para asi diferenciarlos en git stash list por si tenemos varios elementos en el stash. 脡sto con:

git stash save "mensaje identificador del elemento del stashed"

Obtener elelmentos del stash

El stashed se comporta como una Stack de datos comport谩ndose de manera tipo LIFO (del ingl茅s Last In, First Out, 芦煤ltimo en entrar, primero en salir禄), as铆 podemos acceder al m茅todo pop.

El m茅todo pop recuperar谩 y sacar谩 de la lista el 煤ltimo estado del stashed y lo insertar谩 en el staging area, por lo que es importante saber en qu茅 branch te encuentras para poder recuperarlo, ya que el stash ser谩 agn贸stico a la rama o estado en el que te encuentres, siempre recuperar谩 los cambios que hiciste en el lugar que lo llamas.

Para recuperar los 煤ltimos cambios desde el stash a tu staging area utiliza el comando:

git stash pop

Para aplicar los cambios de un stash espec铆fico y eliminarlo del stash:

git stash pop stash@{<num_stash>}

Para retomar los cambios de una posici贸n espec铆fica del Stash puedes utilizar el comando:

git stash apply stash@{<num_stash>}

Donde el <num_stash> lo obtienes desden el git stash list

Listado de elementos en el stash

Para ver la lista de cambios guardados en Stash y as铆 poder recuperarlos o hacer algo con ellos podemos utilizar el comando:

git stash list

Retomar los cambios de una posici贸n espec铆fica del Stash || Aplica los cambios de un stash espec铆fico

Crear una rama con el stash

Para crear una rama y aplicar el stash mas reciente podemos utilizar el comando

git stash branch <nombre_de_la_rama>

Si deseas crear una rama y aplicar un stash espec铆fico (obtenido desde git stash list) puedes utilizar el comando:

git stash branch nombre_de_rama stash@{<num_stash>}

Al utilizar estos comandos crear谩s una rama con el nombre <nombre_de_la_rama>, te pasar谩s a ella y tendr谩s el stash especificado en tu staging area.

Eliminar elementos del stash

Para eliminar los cambios m谩s recientes dentro del stash (el elemento 0), podemos utilizar el comando:

git stash drop

Pero si en cambio conoces el 铆ndice del stash que quieres borrar (mediante git stash list) puedes utilizar el comando:

git stash drop stash@{<num_stash>}

Donde el <num_stash> es el 铆ndice del cambio guardado.

Si en cambio deseas eliminar todos los elementos del stash, puedes utilizar:

git stash clear

Consideraciones:

  • El cambio m谩s reciente (al crear un stash) SIEMPRE recibe el valor 0 y los que estaban antes aumentan su valor.
  • Al crear un stash tomar谩 los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al Staging Area con git add [nombre_archivo] con la intenci贸n de que git tenga un seguimiento de ese archivo, o tambi茅n utilizando el comando git stash -u (que guardar谩 en el stash los archivos que no est茅n en el staging).
  • Al aplicar un stash este no se elimina, es buena pr谩ctica eliminarlo.

Aqu铆 mis apuntes de Git Stash!

git stash : Guarda el trabajo actual de manera temporal. (Archivos modificados o eliminados)
git stash -u : Crea un stash con todos los archivos. (A帽adiendo los creados Untracked)
git stash save 鈥渕ensaje鈥 : Crea un stash con el mensaje especificado.
git stash list : Permite visualizar todos los stash existentes.
git stash clear : Elimina todos los stash existentes.
git stash drop : Elimina el stash m谩s reciente. El que tiene num_stash=0.
git stash drop stash@{num_stash} : Elimina un stash espec铆fico.
git stash apply : Aplica el stash m谩s reciente. El que tiene num_stash=0.
git stash apply stash@{num_stash} : Aplica los cambios de un stash espec铆fico.
git stash pop : Aplica el stash m谩s reciente y lo elimina. El que tiene num_stash=0.
git stash pop stash@{num_stash} : Aplica los cambios de un stash espec铆fico y elimina lo stash.
git stash branch nombre_de_rama : Crea una rama y aplica el stash mas reciente.
git stash branch nombre_de_rama stash@{num_stash} : Crea una rama y aplica el stash especificado.

Consideraciones:

  • El cambio m谩s reciente (al crear un stash) SIEMPRE recibe el valor 0 y los que estaban antes aumentan su valor.
  • Al crear un stash tomar谩 los archivos que han sido modificados y eliminados. Para que tome un archivo creado es necesario agregarlo al Staging Area con git add [nombre_archivo] con la intenci贸n de que git tenga un seguimiento de ese archivo, o tambi茅n utilizando el comando git stash -u.
  • Al aplicar un stash este no se elimina, es buena pr谩ctica eliminarlo.

Git stash es como decirle a un cambio 鈥淣o, no avances quedate conmigo un rato que yo te digo qu茅 hacer鈥.

-git stash: 鈥淰en铆 ac谩 un segundo.鈥

-git stash drop: Lo matas (F)

-git stash pop: Volv茅 a donde estabas (el cambio post-commit vuelve al archivo)

-git stash list: 鈥淢ira usuario, ese es el cambio que tengo guardado.鈥

-git stash branch x: 鈥淎nd谩 a esa rama de ah铆. No al master porque no te quieren ah铆 por ahora 馃槶鈥

VSCode tiene una extensi贸n para visualizar ramas: Git Graph.

![](

Si hacemos

git stash save "aqui va un mensaje para identificar el stash"

Podemos poner mensaje al stash, por si tenemos varios y asi diferenciarlos en git stash list.

De igual manera para llamar a un stash en particular y aplicarlo

git stash apply stash@{numero del stash}

El numero del stash lo podemos ver en la lista de stash

  • git stash : Guardamos un estado temporal

  • git stash list : vemos la lista de stash que tenemos

  • git stash pop : restablecemos el estado que teniamos guardado

  • git stash branch (nombre de la rama ) : despues de haber creado un stash en memoria podemos crear una nueva rama con se cambio que esta en stash

  • git stash drop : borramos un stash ya guardado

Excelente explicaci贸n y si es un comando muy usado, hay una opci贸n que acabo de leerla en la documentaci贸n oficial que me parece interesante y es el

git stash --patch

En donde el git te va mostrando la diferencia de cada uno de los archivos y te va preguntando que si lo quieres guardar en el stash. Es como mantener en memoria no todos los archivos modificados, pero si algunos de ellos y uno decide cuales.

Git stash == ctrl + z

GIT STASH

  • git stash = guarda los cambios que se han hecho al archivo (cambios en ustasged)

  • git stash list = muestra los stash disponibles (los cambios guardados)

  • git stash pop = te lanza el ultimo stash que guardaste y lo borra de la lista de stash

  • git stash pop indiceDelStash = te lanza el stash selececcionado por le indice // los stash se guardan desde arriba hacia abajo (lista) por lo tanto el ultimo stash guardado siempre sera del indice 0

  • git stash apply indice(opcional) = hace los mismo que git pop, pero no borra el stash seleccionado

  • git stash drop = elimina el ultimo stash agregado (stash indice 0)

  • git stash branch nombreDeLaRama = crea una nueva rama con el ultimo stash agregado // se necesita un stash guardado anteriormente //si nos vamos a otra rama el stash seguira en staging, no se sobreesriben con el checkout, es como si fuera un staging global

  • git stash branch nombreDeLaRama indiceDelStash = crea una nueva rama con el stash seleccionado por el indice

git stash = guarda los cambios en memoria cuando no quieres hacer un commit aun
git stash save 鈥渕ensaje鈥 = guarda un stach con mensaje
git stash list = lista de todos stash
git stash pop = trae de vuelta los cambios que teniamos guardados en el ultimo stash
git stash apply stash@{n} = trae el stash que necesites con indicar su numero dentro de las llaves
git stash drop = borra el ultimo stash
git stash clear = borra todos los stash

  • git stash Guarda los cambios temporalmente
  • git stash list Muestra la lista de cambios temporales
  • git stash pop Saca los cambios temporales y regresa los cambios al directorio de trabajo
  • git stash drop Elimina los cambios temporales

Guardar los cambios y ponerlos en una rama

  • git stash branch english-version Coloca el stash en una rama

Apuntes locos 馃槄

Tan bonito que es el git stash 鉂わ笍

Otro comando 煤til es: git stash apply stash@{0} as铆 pueden seleccionar cual stash aplicar de todos los que se hayan guardado.

Pueden ver un poquito m谩s sobre como funciona en este link

 <git stash>  Guarda los cambios en memoria

<git stash list> Muestra la lista de  los cambios que se han guardado

<git stash pop> Muestra los cambios

<git stash branch [rama]>  Lleva los cambios a una nueva rama

<git stash drop> Borra los cambios guardados en stash



  

Mi resumen de esta clase 馃槃

Se pueden tener varios stash a partir de un mismo commit:

Y el comando stash pop tambi茅n sirve para seleccionar alguno de estos:

$ git stash pop stash@{1}

Hay que tener en cuenta que al hacer esto, hay un traslado de stash en git stash list y el que era el stash@{2} pasa a ser stash@{1}

Y para ver la diferencia entre el stash y el 煤ltimo commit sin tener que seleccionarlo con pop se puede usar git stash show.
Por ejemplo con el stash@{2}

> git stash show -p stash@{2}

git stash:
guarda los cambios de manera temporal y regresa al commit anterior; desde alli puedes moverte entre ramas para recuperar informacion desde esta; tambien puede ser util para hacer experimentos rapidos.
Comandos:
git stash: crea el estash
git stash list: lista de stash creados
git stash drop: elimina el stash
git stash pop: abre el stash en la rama actual
git stash branch nombre_rama: guarda el stash en nobre_rama
Nota: recuerda regresar a la rama original antes de quitar el stash

No vi este truco adicional en los otros aportes, entonces lo pongo.
Crear un stash quita los cambios, 驴pero qu茅 pasa si los quiero conservar y simplemente usar el stash como un 鈥渃opiado de portapapeles鈥?
Para crear un stash sin perder los cambios:

  1. Agregar a staging los archivos con los cambios que me interesan
  2. Realizar git stash --keep-index

Comandos de la clase

  1. Para guardar los cambios realizados en memoria: git stash
  2. Para ver lo guardado en memoria: git stash list
  3. Para obtener lo guardado en memoria: git stash pop
  4. Para agregar los cambios almacenados en memoria y ubicarlos en la rama 鈥渘ameBranch鈥: git stash branch 鈥渘ameBranch鈥
  5. Para eliminar los cambios almacenados en memor铆a: git stash drop

git stash: Guarda los cambios en memoria.
git stash list: Muestra la lista de todos los stash que tengamos guardados.
git stash branch nombre_rama: Crea una nueva rama y env铆a todos los cambios all谩.
git stash drop: Borra los cambios guardados en stash.
git stash pop: Muestra los cambios guardados en stash, tambi茅n podemos mostrar los cambios de un stash determinado usando su 铆ndice que nos muestra el git stash list "git stash pop stash@{1} " siendo el 铆ndice {0} el 煤ltimo stash guardado.

Nota:鈥淣o se puede colocar los cambios de dos o m谩s stash al mismo tiempo, antes debemos hacer commit del primer stash鈥

Si realizas cambios, no les haces commit e intentas cambiar de rama; git es tan smart que te dice:

error: Your local changes to the following files would be overwritten by checkout:
	Most used commands in Git.txt
Please commit your changes or stash them before you switch branches.
Aborting

Traducci贸n:
Hey! no seas silly o le haces commit o stash, pero no puedo permitirte que pierdas tus avances!! 馃槈

Gracias Git

## 1- Stasheando cambios

Para stashear estos cambios, simplemente ejecuta聽git stash聽sin ning煤n argumento.

git stash

Esto tomar谩 tanto tus cambios en el 谩rea de espera como los que no est谩n en el 谩rea de espera, grabandolos internamente, y luego limpiando el directorio de trabajo. Esto te da la oportunidad de cambiarte a una nueva rama y desarrollar nuevas caracter铆sticas sin preocuparte de que tu commit parcial vaya a estropear algo.

## 2- Re-aplicando cambios stasheados

Cuando est谩s listo para volver a tu trabajo incompleto, corre el siguiente comando para re-aplicar los cambios stasheados:

git stash pop

El conjunto m谩s reciente de cambios stasheados aparecer谩 en el directorio de trabajo y puedes continuar exactamente donde te hab铆as quedado. Es todo lo que hay que hacer.

Les dejo otros comandos super 煤tiles:

  • $ git stash show: muestra los cambios registrados en el stash. (Es muy parecido a git log --stat).

  • $ git stash show -p: este par谩metro -p hace que el funcionamiento sea paerecido a un git diff, solo que refiriendose al stash.

  • $ git stash apply: funciona igual que git stash pop, solo que en lugar de borrar el stash, lo sigue almacenando. Esto es util por ejemplo si queremos conservar una especie de 鈥渉istoria鈥, o simplemente no queremos eliminarlo.

  • $ git stash clear: borra todos los stash, para no tener que borrarlos uno por uno.


Algunos datos importantes:

  • Podemos tener decenas de stash, incluso de distintas ramas, solo que hay que tener en cuenta que git los guarda 鈥渄e arriba hacia abajo鈥, es decir, que el ultimo stash se llamar谩 stash@{0} o el stash n煤mero 0 (compru茅balo por t铆 mismo con git stash list).

  • Teniendo en cuenta lo anterior, se puede decir que todos los comandos explicados en este comentario hacen referencia al stash@{0}, que no es m谩s que el 煤ltimo stash realizado. Lo interesante es que obviamente podemos cambiar esa referencia. Dicho de otro manera, podemos hacer 鈥済it stash show nombreStash鈥, 鈥済it stash show -p nombreStash鈥, 鈥済it apply nombreStash鈥, etc, etc.

yeiiiii! ya no tendr茅 que hacer una copia de mis archivos para poder cambiarme de branch jajaja

Diariamente trabajo en un equipo muy din谩mico, muchas veces debo salir de mis tareas para atacar un bug o fix que tiene prioridad y sobretodo cuando estas trabajando en nuevos features donde ya has agregado muchas lineas de c贸digo se vuelve un poco complicado (si no existiera git stash) para hacer esa pausa, irte a otra rama para solucionar el bug y luego volver a tu rama anterior y restaurar el estado en el que estabas, quizas se puede pensar que basta con hacer un git add . y comitearlo todo, pero en mi caso prefiero hacer los commit bien organizado seleccionando solo las lineas modificadas asi tambi茅n contribuyo a que mi Code Reviewer tenga mejor visi贸n de los cambios que hice. Para ello confirmo los cambios con la herramienta git gui que ya viene instalada con git al igual que gitk.

La utilidad de Stash es impresionantes para el manejo fluido de un proyecto en t茅rminos del movimiento entre ramas. El resumen de la clase en t茅rminos de comandos es:

$git stash (Guarda los cambios hechos en la rama actual)
$git stash list (Muestra los lugares temporales que han sido guardados)
$git stash pop (Devuelve los cambios stasheadosm谩s recientes en la rama actual)
$git stas branch _ramaS_ (Env铆a los cambios y se mueve a la ramaS)
$git stash drop (Elimina el lugar temporal de guardado m谩s reciente)

Espero que les ayude.

Algo importante a recalcar es que estamos hablando de una lista de 鈥渟tash鈥, por lo que al ejecutar el comando en repetidas ocasiones vas agregando a la lista de 鈥渟tash鈥. Esto se comporta como una Pila de estructura de datos, por eso hay comandos normalmente conocidos como pop.
M谩s informaci贸n en la Documentaci贸n oficial

No es como un ctrl + z ?


Git Stash


git stash (crea un stash)
git stash list (lista los stash)
git stash pop (carga el stash)
git stash branch english-version (Crear una rama con el stash)
git stash drop (borrar un stash)


Git Stash


Encontr茅 esta p谩gina que explica con ejemplos el Git Stash, https://www.cspsprotocol.com/git-stash-command/

Algo similar me pas贸 en un proyecto personal:
Ten铆a que realizar dos historias de usuario, en cada una deb铆a modificar una sola clase. Dos ramas para dos clases.
Hab铆a terminado la primer historia, y como la segunda era muuuy parecida. Quer铆a ver c贸mo hice la primera para replicarla.
Estando en la segunda rama, apliqu茅 el comando

git checkout <commit_de_primer_rama> <documento>

Con 鈥渢omas prestada鈥 esa version del primer archivo, sin cambiar de rama.
Lo importante es recordar devolver esa version, o de lo contrario git tomar谩 como que editaste el primer archivo, tambi茅n en la segunda historia.

Imaginen la escena de Avengers Endgame, donde Bruce va con The Ancient One: Prestame la gema, hago mis cosas; y cuando termine, te la regreso.

git stash == Ctrl + z

git stash almacena temporalmente los cambios que realizamos en el c贸digo en el que trabajamos.

Stash: Sirve para guardar los cambios actuales, y regresar a un punto antes de los cambios que hayan roto tu programa.

*Guarda en estado temporal los cambios.
Git stash

*Lista los stash
Git stash list

*Carga el estado de stash
Git stash pop

*Crea una nueva rama con el stash que tengamos guardado
git stash branch 鈥榥ombre de la rama鈥

*Borra lo que tengas en stash,
Git stash drop

Para mas informacion puedes acceder a este link

Creo que este es uno de los codigos mas importantes para mi, abre una ventana de oportunidades para hacer muchas cosas.

madre mia willy!
y yo aqui creando ramas a lo loco para probar una sola cosa.

Para los que usan linux y no saben como tener la interfaz grafica (gitk) usen: sudo apt-get install git-gui gitk

Tip: Yo uso varias computadora:
1 en el trabajo
1 lap cuando estoy en otro lugar
1 de escritorio
Entonces guardo mis cambios locales en un archivo con el comando
$ git diff --cached > changes.patch
o
los cambios que deje en el stash
$ git stash show 鈥渟tash@{0}鈥 -p > changes.patch

el archivo changes.patch lo comparto en mi google driver
y cuando estoy en mi computadora lo unico que realizo es aplicar las modificaciones
$git apply changes.patch
o si quiero revertir los cambios
$ git apply changes.patch --reverse
Espero que sea de utilidad as铆 puedes guardar tus cambios en un archivo y despu茅s aplicarlos en otro lado.

Git Stash es una forma 煤til de mantener mis cambios en temporal y poder moverme entre ramas.

  • Para guardar cambios temporalmente: git stash
  • Para ver los cambios en stash: git stash -list
  • Para mover los cambios en stash a una rama: git stash branch <nombre de rama>
  • Para borrar cambios en stash: git stash -drop

Como se puede ver en la consolas cuando Freddy utiliza git stash list abajo se muestran los 鈥渟tashes鈥 hechos y con un identificador:

stash@{0}: WIP on master: 255ddd1
stash@{1}: WIP on master: 255ddd1

Es el 0 y el 1 despu茅s de stash@, esto es importante por que el comando git stash drop elimina el 煤ltimo cambio hecho, pero tambi茅n se le puede especificar el identificador, por ejemplo git stash drop 1, esto tambi茅n ocurre con el comando git stash pop asi que es 煤til para mostrar un stash especifico. Para eliminar todos los cambios hechos se utiliza git stash clear

git stash = Ctrl + Z.

Interesante clase, poniendo en pr谩ctica.

驴Por cu谩nto tiempo puedo tener ese cambio en stash?
Supongo que mientras se apaga el equipo 驴O no?

Comandos vistos en esta clase:

- git stash = guarda temporalmente el 煤ltimo commit de la rama actual.

- git stash list = muestra el 煤ltimo stash realizado.

- git stash pop = carga el 煤ltimo stash realizado en la rama actual.

- git stash branch nombre_rama = guarda el 煤ltimo stash en una nueva rama. Despu茅s se debe hacer commit desde la nueva rama creada.

- git stash = se puede usar tambi茅n para recuperar el 煤ltimo commit de la rama actual, en caso de haber cometido errores. Es como una especie de ctrl+z de git.

- git stash drop = borra el 煤ltimo stash realizado.

Una manera util de nombrar a los stash cuando se tiene demasiados o solamente quieres distinguir cada stash es con el comando:

git stash push -m "my_stash"

Si se desea hacer varios 鈥淪tash鈥 y al mismo tiempo dejar un recordatorio para diferenciarlos, se usa el comando Git stash save <鈥淢ensaje鈥>.
Al momento de usar el git stash list se muestran todos los stash con su id (Stash@{0}) y un mensaje. Para volver a aplicar alg煤n cambio espec铆fico guardado en la lista de stash se usa git stash pop <StashId>.

git stast pop = git stash apply + git stash drop

Git stash es el Ctrl Z de Git

Git stash es bueno para probar algo rapido

`git stash` guarda solo los archivos que est茅n dentro del stage index

Con mi desorden al parecer git stash va a ser mi pan de cada d铆a

como aportaci贸n importante les comento que se pueden guardar muchos stash al mismo tiempo y con le codigo que poseen se pueden tomar los que uno desea, eso se logra adicionando a los comandos aqu铆 dados en la clase el c贸digo del stash

Git Stash 驴de qu茅 se trata?
Se trata de un comando que 鈥渃ongela鈥 el estado en el que se encuentra el proyecto en un momento determinado, con todos los cambios que tenemos a 鈥渟in comitear鈥, y lo guarda en una pila provisional brindando la posibilidad de poder recuperarlo m谩s adelante. Siguiendo con nuestro ejemplo, lo que har铆amos es guardar los cambios que hemos hecho con git stash, esto deja el working tree limpio y nos permite cambiar de rama sin problema. Una vez solucionado el bug, volver铆amos a nuestra rama y recuperar铆amos nuestros cambios con git stash apply.

  • El comando $ git stash nos permite guardar temporalmente los cambios que no han sido guardados en un commit.
    -En caso de haber cometido alg煤n error, o que en medio de nuestro trabajo deseamos ir a alguna rama sin perder los cambios sin necesidad de hacer commit este comando nos es muy 煤til.
  • Una vez guardados temporalmente los datos podemos decidir entre borrar los cambios, crear una rama y mandar esos cambios ah铆, o volverlos a traer en caso de ser necesario.
  • NOTA: No se puede colocar el contenido de dos stash sin antes haber hecho commit del primero.
  • git stash
  • git stash list
  • git stash pop

--------------------------- stash--------------------------------
Es la forma temporal en que dejamos los archivos en staging para poder cambiarse de rama sin perde lo cambio que fueramos hecho

git stash: es otro de los limbos, como el staging area. Para agregar los cambios estos deben estar en el staging area.
git stash list: nos muestra la lista de stash que tengamos.
git stash drop : nos permite borrar un stash.
git stash apply: aplicamos el 煤ltimo cambio.
git stash pop: aplicamos el 煤ltimo cambio.
git stash branch +nombre de rama nueva : es para poner la informacion del stash una nueva rama automatica

git stash Es una forma 煤til de tener en temporal los cambios para poder moverse entre ramas y luego poder recuperar esos cambios.

Bien eso de usar stash cuando se lleva mucho trabajo adelantado sin hacer commits y se necesitan datos de otra rama. En vez de ir a GitHub para tener todo el entorno listo, mejor hacer git stash y luego**_ checkout_** hacia otra rama.

Relacion茅 a stash con una c谩psula.
Esta c谩psula o Stash sirve para guardar un cambio dentro del archivo

$ git stash

y puedes liberar el cambio con

$ git stash pop

Tambi茅n te permite liberar el cambio en un branch o rama con:

$ git stash branch **nombre del branch o rama**

y finalmente eliminar la capsula con:

$ git stash drop

liberando el cambio guardado.馃挌

En resumen鈥

El comando聽git stash almacena temporalmente (o guarda en un聽stash) los cambios que hayas efectuado en el c贸digo en el que est谩s trabajando para que puedas trabajar en otra cosa y, m谩s tarde, regresar y volver a aplicar los cambios m谩s tarde. Guardar los cambios en stashes resulta pr谩ctico si tienes que cambiar r谩pidamente de contexto y ponerte con otra cosa, pero est谩s en medio de un cambio en el c贸digo y no lo tienes todo listo para confirmar los cambios.

Comparto mis apuntes:

Vuelvo del futuro XD. Volv铆 porque record茅 que habia visto la funcionalidad de git stash en este curso, pero no sab铆a cu谩l era el comando y requer铆a de su funcionalidad.

Este tema lo necesit茅 desde hace unas clases hahaha, me alegra que exista, sin duda nos sacara de apuros.

Esta clase me habr铆a ayudado con muchos l铆os en clases y pr谩cticas anteriores! 馃挌

Freddy en la ultima parte del video dijo: 鈥榗hereve aprenderlo pero no creo necesitarlo鈥 lo mismo pense hace 2 a帽os cuando vi por primera vez el curso, ahora que ya estoy en cosas mucho mas avanzadas, aqu铆 estoy de regreso para ver como se usa git stash鈥 Bastante sabio el hombre.

que bello es el comando stash

git stash -m "mensaje"  //Si quieres a帽adir un mensaje m谩s descriptivo para saber qu茅 es lo que has hecho.  

Resumen de la clase
Hice cambio a la rama master, tengo que irme a una rama anterior pero aun no quiero hacerle commit a las modificaciones.
Las quiero guardar en otro lugar
-git stash//guarda los cambios
-git stash list//work in process
Ahora me muevo en la rama
Es mejor regresar a la rama principal y luego ah铆 quitar el stash
-git stash pop//para obtener lo guardado

Tambi茅n podemos guardar cambios y llevarlos a otra rama.
Primero: git stash
Segundo: git stash branch version-ingles

si hicimos cambios que no deseamos conservarm podemos usar git stash y luego:
git stash drop// para borrar lo grabado

Para crear una rama y aplicar el stash mas reciente podemos utilizar el comando
git stash branch <nombre_de_la_rama>
Si deseas crear una rama y aplicar un stash espec铆fico (obtenido desde git stash list) puedes utilizar el comando:
git stash branch nombre_de_rama stash@{<num_stash>}

Git Stash: Guardar cambios en memoria y recuperarlos despu茅s
En ocasiones realizamos ciertos cambios en nuestro proyecto, pero no queremos hacer un commit todav铆a y para estas ocasiones especiales existe un comando de git muy 煤til: Stash. Stash nos permite guardar nuestros cambios en un lugar sin tener que hacer un commit y nos lleva de vuelta al ultimo commit.
Podemos tener varias versiones de nuestro proyecto en Stash
Existen ciertos comandos que considero que son muy 煤tiles:
鈥 git stash: guarda los cambios realizados a partir del 煤ltimo commit
鈥 git stash save 鈥渕ensaje鈥: tiene la misma funci贸n que git stash, pero nos permite colocar un mensaje para poder identificarlo m谩s f谩cil.
鈥 git stash list: nos muestra todos los stash que tenemos, cada stash tiene un identificador y cada que agregamos un nuevo stash todos los dem谩s se recorren una posici贸n y el nuevo toma el valor del 铆ndice 0.
鈥 git stash pop: nos trae devuelta los cambios del stash mas reciente, el del 铆ndice 0 y tambi茅n lo elimina
鈥 git stash drop: elimina el stash mas reciente, el que se encuentra en el 铆ndice 0, hay que tener cuidado de no confundirlo con pop ya que drop 煤nicamente lo elimina y no nos trae los cambios devuelta.
鈥 git stash apply: nos trae devuelta los cambios del 煤ltimo stash, pero no lo elimina, es muy parecido al comando git stash pop pero la diferencia que tiene con este es que al usar apply el stash sigue ah铆 mientras que en pop si se elimina.
鈥 git stash branch nombre_de_la_rama: crea una nueva rama y aplica los cambios del stash mas reciente
A cada uno de los 煤ltimos cuatro comandos mencionados (pop, drop, apply, branch) se les puede indicar el 铆ndice de un stash en especifico para ejecutarse sobre este, solamente se tiene que agregar el final stash@{indice_stash}
Ejemplos:
鈥 git stash pop stash@{1}
鈥 git stash drop stash@{2}
鈥 git stash apply stash@{3}
鈥 git stash branch nombre_de_la_rama stash@{4}
Me gustar铆a a帽adir que en muchos de los aportes de mis compa帽eros fueron de gran utilidad para comprender mejor como funciona stash y sobre todo las diversas aplicaciones que tiene este comando 馃槑

lo entend铆 como control + Z a grande rasgos

Excelente explicaci贸n master!

GIT-STASH mi contribuci贸n:
Stash nos permite mantener cambios en nuestros archivos sin tener la necesidad de hacer un commit o una nueva rama tenemos estos comandos para ellos:
git stash
git stash list: Aparecen los cambios que hicimos.
gist stash pop: muestra los cambios de modificaci贸n como un estado.
git stash branch nombrerama: crea una nueva rama con tu modificacion.
git stash drop: borra la modificaci贸n que hiciste.

Stash: Guardar cambios en memoria y recuperarlos despu茅s

  • Hacer cambios, querer regresar depues pero sin tener que hacer commits todavia

  • Se revierten los cambios, y los guarda en el stash

  • Los podemos ver con stash list

  • Con stash pop regresamos lo que tenemos del stash al ambiente de trabajo

  • Con stash drop, podemos eliminar lo que existe en el

Buena pr谩ctica siempre hacer git pull

esta cool el stash creo que lo aplicare a partir de ahora鈥

Esto es verdaderamente 煤til, pens茅 que ya sab铆a gran parte por tomar el anterior curso. Pero nunca he usado git stash y en entornos reales de trabajo ayuda mucho.

Pregunta de examen
驴C贸mo colocar stash en una rama?
https://platzi.com/clases/1557-git-github/19984-stash/?time=229

  • git stash = guardar cambios en memoria para poder moverse entre ramas
    -git stash list = lista los cambios guardados en memoria.
    -git stash pop = haber el stach que se tenia antes de cambiar a la rama
  • git stash branch NOMBRE_DE_LA_RAMA = se crea una rama con el stash guardado
  • git stash drop = eliminamos el stash

Quise hacer una rama con un stash, pero no me acord茅 que deb铆a ejecutarse primero el stash. Me puse a improvisar comandos y result茅 agreg谩ndolos al stage. 驴Qu茅 deber铆a hacer en ese caso para sacarlos de stage y poderlos poner en stash?

Me gust贸 mucho este comando, puede ayudar a resolver descuidos o momentos de desconcentraci贸n y realizar cambios no deseados en otras ramas. 馃檪

Muy util, ya tengo pensado muchos casos de usos.

Este es un comando muy utilizado en el caso de que est茅n trabajando en una tarea en especifico del proyecto y se encuentran en una rama que hace referencia a esa tarea, pero resulta que surgi贸 un bug en la rama que hace referencia a producci贸n y tienes que cambiarte r谩pidamente de rama a solucionarlo pero no quieres committear porque aun no terminas tu tarea entonces haces un git stash mientras vas a solucionar el problema en prod y luego vuelves a tu rama de la tarea.

Que gran ayuda la de git stash

git stash, guarda en memoria; si por error se apaga el equipo o cierro el cierro el git, pierdo el stash?

Usar stash para almacenar cambios de manera temporal, sin realizar add o commit directamente a la rama.

Una herramienta muy interesante para realizar pruebas.

git stash
git stash list
git stash pop
git stash branch english-version
git stash drop

Y como dijio Freddy 鈥淟o vas a necesitar鈥 Lo necesit茅 hahahah
Est谩 genial poder regresar a los cursos que ya hiciste y entender mas a profundidad su contenido
Love Platzi!!

$git stash 
  • Guarda (en stash-> que es una lista temporal) los cambios realizados para que se puedan recuperar en el futuro.
$git stash apply
  • Aplica cambios pero los mantiene en nuestra lista (stash).
$git stash pop
  • Aplica cambios pero los elimina de nuetra lista (stash).

Git stash es demasiado bueno para creerlo!

print("Aprendiendo Git Stash");

Muy importante ese tal git stash

git permite guardar varios cambios desde diferentes ramas

git stash drop solo elimina el 煤ltimo cambio realizado (es decir el primero de la lista, como una pila), pero git stash clear borra toda la lista

Con ese 煤ltimo comentario que hizo Freddy creo que 茅l nos lee la mente. jajajaja