Herramientas de usuario

Herramientas del sitio


clase:daw:daw:1eval:tema05

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:daw:daw:1eval:tema05 [2022/12/07 12:30]
admin [Estados de un fichero]
clase:daw:daw:1eval:tema05 [2024/03/02 13:01] (actual)
admin [Sincronización de Git]
Línea 13: Línea 13:
 {{chiste_git.png|}} {{chiste_git.png|}}
  
 +
 +{{:clase:daw:daw:1eval:git-command-line.jpg?330|}}
 +
 +
 +[[https://survey.stackoverflow.co/2022#version-control-vc-interaction|Source:Stack overflow Developer survey 2022]]
 +
 +
 +
 +  Código nuestro que estas en GitHub.
 +  Santificados sean tus commits.
 +  Venga a nosotros tu fetch.
 +  Hágase tu merge tanto en remoto como en local.
 +  Danos hoy nuestro branch de cada día.
 +  Perdona nuestras pulls, así como también nosotros perdonamos a los que nos pushean más rápido;
 +  No nos dejes caer en los conflictos,
 +  y líbranos del checkout.
 +  Amén
 +  ---Javier del Moral (2023)
 ====== Instalando Git ====== ====== Instalando Git ======
 Al instalar Git en Windows hay varias opciones a tener en cuenta que explicaremos en clase. Al instalar Git en Windows hay varias opciones a tener en cuenta que explicaremos en clase.
Línea 61: Línea 79:
  
 <note tip> <note tip>
-La //staged area// en git también se llama a veces //cached// o //index//. Es que hay comandos que usan el modificador ''--cached'' para referirse a la //staged area// otros usan ''--staged''.+La //**staged area**// en git también se llama a veces //**cached**// o //**index**//  o //**arbol de trabajo**//. Es que hay comandos que usan el modificador ''--cached'' para referirse a la //staged area//  otros usan ''--staged'' y otro ''--worktree''..
  
   * El comando [[https://git-scm.com/docs/git-rm|git rm]] usa el modificador ''--cached'' para referirse a la //staged area//   * El comando [[https://git-scm.com/docs/git-rm|git rm]] usa el modificador ''--cached'' para referirse a la //staged area//
-  * El comando [[https://git-scm.com/docs/git-restore|git restore]] usa el modificador ''--staged'' para referirse a la //staged area// +  * El comando [[https://git-scm.com/docs/git-restore|git restore]] usa el modificador ''--staged'' o ''--worktree'' para referirse a la //staged area// 
-  * El comando [[https://git-scm.com/docs/git-restore|git diff]] usa el modificador ''--staged'' o ''--cached'' para referirse a la //staged area//+  * El comando [[https://git-scm.com/docs/git-restore|git diff]] usa el modificador ''--cached'' o ''--staged''   para referirse a la //staged area//
  
  
 +^  ^  ''--cached''  ^  ''--staged''  ^  ''--worktree''  ^
 +^  ''git rm''  |  ✓  |  |  |
 +^  ''git restore''  |    ✓  |  ✓  |
 +^  ''git diff''  |  ✓  |  ✓  |  |
 </note> </note>
  
 +
 +<note tip>
 +Por defecto todos los ficheros del anterior commit ya está en el staged area, por eso para quitar un fichero de git hay que borrarlo del staged area. ''git rm --cached fichero''.
 +</note>
  
 {{:clase:daw:daw:1eval:git-estados.png|}} {{:clase:daw:daw:1eval:git-estados.png|}}
Línea 163: Línea 189:
  
 </note> </note>
 +
 +Más información:
 +  * [[https://stackoverflow.com/questions/65434544/whats-the-difference-between-git-rm-cached-git-restore-staged-and-gi|What's the difference between 'git rm --cached', 'git restore --staged', and 'git reset']]
  
 ===== Sincronización de Git ===== ===== Sincronización de Git =====
 Una misma rama en git puede estar en varios sitios a la vez. El repositorio es el historio donde están todos los //commits// que se han hecho. Una misma rama en git puede estar en varios sitios a la vez. El repositorio es el historio donde están todos los //commits// que se han hecho.
 +
 +{{:clase:daw:daw:1eval:chiste-git-force.jpg?direct|}}
  
 Vamos a explicar cada uno de ellos suponiendo que estamos en la rama ''master''. Vamos a explicar cada uno de ellos suponiendo que estamos en la rama ''master''.
Línea 180: Línea 211:
 {{:clase:daw:daw:1eval:repositorios.png|}} {{:clase:daw:daw:1eval:repositorios.png|}}
  
-  * Para poner en el área de trabajo una copia del último //commit// de ''master''.+  * Para poner en el área de trabajo una copia del último //commit// de ''master'' que es lo mismo que moverse a la rama ''master''. Tambien se puede usar con un hash de un commit.
  
-  git checkout master+  git switch master
  
 \\ \\
Línea 195: Línea 226:
 \\ \\
 \\ \\
-  * Para copiar lo que hay en el repositorio remoto en la copia del repositorio remoto, es decir en ''origin/master''.+  * Para copiar lo que hay en el repositorio remoto en una rama local que es después del fetch siempre copia del repositorio remoto, es decir en ''origin/master''.
  
   git fetch   git fetch
Línea 204: Línea 235:
 \\ \\
  
-  * Para copiar lo que hay en el repositorio remoto en nuestra rama loca, es decir en ''master'' y ''origin/master''. Como en nuestra rama puede ser distinta, se hace un ''merge'' sobre nuestra rama.+  * Para copiar lo que hay en el repositorio remoto en nuestras ramas locales, es decir en ''master'' y ''origin/master''. Como nuestra rama puede ser distinta, se hace un ''merge'' sobre nuestra rama. **Lo cual es peligroso.**
  
   git pull   git pull
Línea 342: Línea 373:
   * [[https://devconnected.com/how-to-git-reset-to-head/|How To Git Reset to HEAD]]   * [[https://devconnected.com/how-to-git-reset-to-head/|How To Git Reset to HEAD]]
  
-===== Moverse por commits ===== +===== Moverse por git ===== 
-El comando ''git checkout <commit>'' vuelve a un commit anterior pero **sin modificar** los commits siguientes. Su utilidad es ver como estaba el código en estados anteriores.+En git podemos //movermos// a otras ramas o a otros commit. Para movernos se usa el comando ''git switch''.
  
-  * Volver a un commit anterior, no se borran los siguientes commits pero obviamente si que de modifica el //área de trabajo// para poner los ficheros de ese commit.+<note>También se puede usar el comando ''git checkout'' pero se creo el nuevo comando ''git switch'' que se puede usar la para hacer lo mismo así que recomendamos usar el comando más nuevo.</note>
  
-  git checkout 0d588ed+==== Ramas ==== 
 +Para movernos por ramas solo hay que indicar el nombre de la rama 
 + 
 +  git switch develop 
 + 
 +Si la rama es del tipo ''origin/nombre_rama'' hay que indicar ''--detach'' ya que sobre esa rama no se pueden crear commit puesto que esa rama viene del remoto con ''git fetch'' 
 + 
 +  git switch --detach origin/develop 
 + 
 + 
 +==== Commits ==== 
 +Podemos movernos a un commit anterior de forma que los ficheros de ese commit estén en nuestro directorio de trabajo. El lanzar esta orden no modifica ningún commit.Su utilidad es ver como estaba el código en estados anteriores. Hay que indicar ''--detach'' ya que sobre commit no se pueden añadir más commits yaque ya están añadidos ya que es un commit que está a mitad del arbol de git. 
 + 
 +  git switch --detach 2308b63
  
 \\ \\
Línea 353: Línea 397:
 Si ahora lanzamos el comando ''git status'' se mostrará lo siguiente Si ahora lanzamos el comando ''git status'' se mostrará lo siguiente
  
-  HEAD detached at 0d588ed +  HEAD desacoplada en 2308b63 
-  nothing to commit, working tree clean+  nada para hacer commit, el árbol de trabajo está limpio
  
-El significado de **HEAD detached** es que ahí no podemos trabajar,  no pudiendo hacer nuevos commits desde ahí aunque si que podríamos hacer una nueva rama.+El significado de **HEAD desacoplada** o **HEAD detached** es que ahí no podemos trabajar,  no pudiendo hacer nuevos commits desde ahí aunque si que podríamos hacer una nueva rama.
  
  
   * Para volver al commit último de la rama solo hay que poner el nombre de la rama en vez de un commit   * Para volver al commit último de la rama solo hay que poner el nombre de la rama en vez de un commit
  
-  git checkout master +  git switch master
-===== reset vs checkout ===== +
-Veamos ahora una pequeña tabla que compra ambos comandos. +
- +
- +
-| ^  Ámbito  ^^^ +
-^ Orden ^  Fichero  ^  Commit  ^  Rama  ^ +
-| ''git checkout'' | Descartar los cambios del fichero | Ir hasta el commit | Moverse a la rama | +
-| ''git reset'' | Quitar el fichero de la //staged area// | Ir hasta el commit, borrando los siguientes a él |  ---  |+
  
  
Línea 400: Línea 436:
  
   git config --global credential.helper store   git config --global credential.helper store
 +  
 +  
 +===== Stash =====
 +Hay veces que queremos guardar temporalmente los cambios para después volver a ellos, por ejemplo si queremos cambiar de rama.
 +
 +git contiene una orden para hacer eso que es ''git stash''.
 +
 +  * Guardar solo lo que está en la //stage area//.
 +<sxh bash  >
 +git stash push
 +</sxh>
 +
 +
 +  * Guarda todos los ficheros aunque NO estén en la //stage area//. Es decir, también los ficheros nuevos
 +git contiene una orden para hacer eso:
 +<sxh bash>
 +git stash push --all
 +</sxh>
 +
 +
 +Y si luego queremos recuperar los cambios se hace con:
 +
 +<sxh bash>
 +git stash pop
 +</sxh>
 +
  
 ===== Log ===== ===== Log =====
clase/daw/daw/1eval/tema05.1670412631.txt.gz · Última modificación: 2022/12/07 12:30 por admin