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 [2024/09/19 09:39]
admin [Stash]
clase:daw:daw:1eval:tema05 [2024/11/14 10:23] (actual)
admin [Stash]
Línea 81: Línea 81:
  
 <note tip> <note tip>
-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''..+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''
  
   * 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'' o ''--worktree'' 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 diff]] usa el modificador ''--cached'' o ''--staged''   para referirse a la //staged area//+  * El comando [[https://git-scm.com/docs/git-diff|git diff]] usa el modificador ''--cached'' o ''--staged''   para referirse a la //staged area//
  
  
-^  ^  ''--cached''  ^  ''--staged''  ^  ''--worktree'' +^  ^  ''--cached''  ^  ''--staged'' 
-^  ''git rm''  |  ✓   +^  ''git rm''  |  ✓  |  | 
-^  ''git restore''  |   |  ✓  |  ✓  | +^  ''git restore''  |    ✓  | 
-^  ''git diff''  |  ✓  |  ✓   |+^  ''git diff''  |  ✓  |  ✓  |
 </note> </note>
  
Línea 138: Línea 138:
   * Para borrar un fichero y que ya no esté a partir de ahora en "git". Se usa ''--cached'' para que no se borre del área de trabajo y si solo de la //staged area//.   * Para borrar un fichero y que ya no esté a partir de ahora en "git". Se usa ''--cached'' para que no se borre del área de trabajo y si solo de la //staged area//.
  
-  git rm --cached fichero+  git rm --cached fichero
  
 +<note>
 +También se puede usar el comando ''git rm fichero'' y en ese caso se borra tanto del //staged area// como del //área de trabajo//. No hay forma de borrarlo solo del //área de trabajo// ya que para eso está ''rm'' de Linux.
 +</note>
  
 \\ \\
 \\ \\
-  * Para deshacer los cambios de un fichero que hay en el area de trabajo y se cambie por la versión que hay en el último //commit//.+  * Para deshacer los cambios de un fichero que hay en el área de trabajo y se cambie por la versión que hay en el último //commit//.
  
   git restore fichero   git restore fichero
Línea 151: Línea 153:
 También se puede usar el comando ''git checkout fichero'' pero se creo el nuevo comando ''git restore'' que se puede usar la para hacer lo mismo así que recomendamos usar el comando más nuevo. También se puede usar el comando ''git checkout fichero'' pero se creo el nuevo comando ''git restore'' que se puede usar la para hacer lo mismo así que recomendamos usar el comando más nuevo.
 </note> </note>
 +
 +<note>
 +También se puede añadir el argumento ''--worktree'' de forma que quede ''git restore --worktree fichero'' pero no es necesario ya que se hace por defecto. Pero si se usara ''--staged'' no se modifica el área de trabajo por defecto y en ese caso sería necesario añadirlo.
 +
 +^    Restaura el fichero en el //área de trabajo//    Restaura el fichero en el //staged area//  ^
 +| ''git restore fichero''    ✓  |    | 
 +| ''git restore --worktree fichero''  |  ✓  |    |
 +| ''git restore --worktree --staged fichero''  |  ✓  |  ✓  |
 +| ''git restore --staged fichero''  |    |  ✓  |
 +</note>
 +
 +
 \\ \\
 \\   \\  
Línea 258: Línea 272:
   * Para //mergear// lo que hay en la rama ''origin/master'' en la rama ''master''.   * Para //mergear// lo que hay en la rama ''origin/master'' en la rama ''master''.
  
-  git merge origin/master+  git merge --ff-only origin/master
  
 \\ \\
Línea 277: Línea 291:
   * Para añadir un nuevo remote   * Para añadir un nuevo remote
  
-  git remote add otroservidor https://www.otroservidor.com/lgonzalezmislata/prueba.git+  git remote add nombreminuevoremote https://www.otroservidor.com/lgonzalezmislata/prueba.git
  
 Una vez creado el remote ''otroservidor'' ya podremos usarlo en los comandos ''git push'', ''git fetch'' o ''git pull'' además de usar ''origin'' Una vez creado el remote ''otroservidor'' ya podremos usarlo en los comandos ''git push'', ''git fetch'' o ''git pull'' además de usar ''origin''
Línea 374: Línea 388:
   * [[https://styde.net/deshaciendo-cosas-en-git/|Deshaciendo cosas en Git]]   * [[https://styde.net/deshaciendo-cosas-en-git/|Deshaciendo cosas en Git]]
   * [[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]]
 +
 +===== Deshacer commits =====
 +Una vez que hemos subido un commit a GitHub es una muy mala práctica borrar un commit sin embargo si queremos deshacer algo , podemos usar ''git revert <commit>''.
 +
 +
 +  * Se hace un nuevo commit que deshace el último commit
 +
 +  git revert HEAD~1
 +
 +  * Prepara un nuevo commit que deshace el último commit pero sin realmente hacer el commit. Lo que hace el modificar los ficheros y añadirlos a la //staged area//.Después se hace el commit. 
 +
 +
 +  git revert --no-commit HEAD~1
 +  git commit -am "Mensaje de commit"
 +
 +
 +<note tip>La opción ''--no-commit'' es útil porque nos permite revisar que va a hacer el commit y nos permite hacer alguna modificación más.
 +
 +Si no estamos interesados en hacer el commit lo podemos abortar con ''git revert --abort'' o usar el ya conocido ''git restore --staged --worktree fichero''.
 +</note>
 +
 +<note important>
 +En caso de un conflicto se deberá resolver el conflicto en el fichero, hacer el ''git add <fichero>'' y por último ya hacer el commit.
 +</note>
 +
 +
 +<note tip>
 +La diferencia entre ''git revert'' y ''git reset'' es que ''git revert'' crea un nuevo commit que deshace el trabajo de otro commit , mientras que ''git reset'' borra realmente los commits.
 +
 +
 +
 +  * Estado inicial de
 +
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'master','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + commit id: "C"
 +</flow>
 +
 +  * Si hacemos un ''git revert C'' quedará así
 +
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'master','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + commit id: "C"
 + commit id: "Revert C"
 +</flow>
 +
 +
 +  * Si hacemos un ''git reset --hard B'' quedará así
 +
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'master','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 +</flow>
 +
 +
 +
 +</note>
 +
 +
 +
  
 ===== Moverse por git ===== ===== Moverse por git =====
Línea 445: Línea 527:
 git contiene una orden para hacer eso que es ''git stash''. git contiene una orden para hacer eso que es ''git stash''.
  
-  * Guardar solo lo que está en la //stage area//.+  * Guardar solo lo modificado (estén o no en el //staged area//)
 <sxh bash  > <sxh bash  >
 git stash push git stash push
Línea 453: Línea 535:
   * Guarda todos los ficheros aunque NO estén en la //stage area//. Es decir, también los ficheros nuevos. Y al hacer el ''pop'' se restaura el estado en el staged area.   * Guarda todos los ficheros aunque NO estén en la //stage area//. Es decir, también los ficheros nuevos. Y al hacer el ''pop'' se restaura el estado en el staged area.
 <sxh bash> <sxh bash>
-git stash push --include-untracked --index+git stash push --include-untracked
 </sxh> </sxh>
  
-<note tip> 
-No se recomienda usar ''--all'' ya que también añade los ficheros ignorados por git y al hacer el ''pop'' **NO** se restaura el estado en el staged area. 
-</note> 
  
 +^    //Por defecto//    ''--include-untracked''  ^  ''--all''  ^
 +| Los ficheros modificados (estén o no en el //staged area// |  ✓  |  ✓  |  ✓  |
 +| Los ficheros nuevos |    |  ✓  |  ✓  |
 +| Los ficheros ignorados |    |    |  ✓  |
  
-^    //Siempre//    ''--all''  ^  ''--include-untracked''  ^  ''--index''  ^ 
-| Los ficheros modificados  |  ✓  |  ✓  |  ✓  |    | 
-| Los ficheros nuevos |    |  ✓  |  ✓  |    | 
-| Los ficheros los ignorados |    |  ✓  |    |    | 
-| Restaura la staged area |    |    |    |  ✓  | 
  
  
 +Y si luego queremos recuperar los cambios se hace con:
  
 +<sxh bash>
 +git stash pop 
 +</sxh>
  
- +  * Pero en el caso de hubiera algo en el //staged area// se tendría que hacer con el argumento ''--index'' para que restaure el //staged area//
-Y si luego queremos recuperar los cambios se hace con:+
  
 <sxh bash> <sxh bash>
-git stash pop+git stash pop --index
 </sxh> </sxh>
- 
  
 ===== Log ===== ===== Log =====
clase/daw/daw/1eval/tema05.1726731559.txt.gz · Última modificación: 2024/09/19 09:39 por admin