Herramientas de usuario

Herramientas del sitio


clase:daw:daw:2eval:tema06

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:2eval:tema06 [2021/11/14 12:45]
admin [Merge]
clase:daw:daw:2eval:tema06 [2024/01/02 10:07] (actual)
admin [Usando Ramas]
Línea 14: Línea 14:
 {{:clase:daw:daw:1eval:git-flow.png?600|}} {{:clase:daw:daw:1eval:git-flow.png?600|}}
  
 +{{:clase:daw:daw:2eval:drinkinggame.jpg|}}
  
 Ejemplo de Ramas Ejemplo de Ramas
Línea 50: Línea 51:
   * Crear una rama nueva y subirla   * Crear una rama nueva y subirla
  
 +<sxh bash>
   git branch nuevaRama   git branch nuevaRama
-  git checkout nuevaRama +  git switch nuevaRama 
-  git push -u origin nuevaRama+  git push --set-upstream origin nuevaRama 
 +  git push -u             origin nuevaRama
  
 +</sxh>
 \\ \\
 \\ \\
   * Bajar una nueva rama   * Bajar una nueva rama
  
 +<sxh bash>
   git fetch --prune      git fetch --prune   
-  git checkout nuevaRama+  git switch nuevaRama
  
 +</sxh>
 <note tip> <note tip>
   * ''fetch'':Se pone ''--prune'' , para que borre las referencias locales de ramas remotas que ya no están.   * ''fetch'':Se pone ''--prune'' , para que borre las referencias locales de ramas remotas que ya no están.
-  * ''checkout'': Por defecto al cambiar a la nueva rama ya se hace un ''--track'' a ''origin/nuevaRama''+  * ''switch'': Por defecto al cambiar a la nueva rama ya se hace un ''--track'' a ''origin/nuevaRama''
 </note> </note>
  
Línea 71: Línea 77:
   * Borrar una rama en local que ha sido mergeada o subida   * Borrar una rama en local que ha sido mergeada o subida
  
 +<sxh bash>
   git branch -d miRama   git branch -d miRama
   git branch --delete miRama   git branch --delete miRama
 +</sxh>
  
 \\ \\
Línea 79: Línea 87:
   * Borrar una rama en local que NO ha sido mergeada ni subida (hay 3 formas distintas). Pero es usar el modificador ''-f'' o ''--force''   * Borrar una rama en local que NO ha sido mergeada ni subida (hay 3 formas distintas). Pero es usar el modificador ''-f'' o ''--force''
  
 +<sxh bash>
   git branch -d -f      miRama   git branch -d -f      miRama
   git branch --delete --force miRama   git branch --delete --force miRama
   git branch -D         miRama   git branch -D         miRama
 +</sxh>
  
  
Línea 89: Línea 99:
   * Borrar una rama en remoto   * Borrar una rama en remoto
  
 +<sxh bash>
   git push origin --delete miRama   git push origin --delete miRama
 +</sxh>
  
 \\ \\
Línea 114: Línea 126:
  
 Se usa para poner los commits de  origin/develop en nuestra develop de antes que lo de develop porque hay commits distintos en cada rama pero del mismo commit origen Se usa para poner los commits de  origin/develop en nuestra develop de antes que lo de develop porque hay commits distintos en cada rama pero del mismo commit origen
- 
  
 {{:clase:daw:daw:2eval:rebase.png?direct|}} {{:clase:daw:daw:2eval:rebase.png?direct|}}
 +
 +
 +''git commit -m "E"''
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'origin/develop','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + branch develop
 + commit id: "E"
 +
 +
 +</flow>
  
 \\ \\
 +''git fetch --prune''
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'origin/develop','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + branch develop
 + commit id: "E"
 + checkout origin/develop
 + commit id: "C"
 + commit id: "D"
 +
 +
 +</flow>
 +
 +\\
 +'' git switch develop''
 +\\
 +''git rebase origin/develop''
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'origin/develop','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + commit id: "C"
 + commit id: "D"
 + branch develop
 + commit id: "E"
 + checkout origin/develop
 +
 +
 +</flow>
  
 ==== git merge --squash rama ==== ==== git merge --squash rama ====
Línea 137: Línea 193:
  
 \\ \\
 +
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'develop','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + commit id: "C"
 + commit id: "D"
 +</flow>
 +
 +\\
 +''git fetch --prune''
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'develop','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + commit id: "C"
 + commit id: "D"
 + branch origin/develop
 + commit id: "E"
 + commit id: "F"
 +</flow>
 +
 +
 +\\
 +''git merge --ff-only origin/develop''
 +<flow>
 +%%{init: { 'logLevel': 'debug', 'theme': 'default','themeVariables': {  'git0': '#6D97CA','git1': '#00ffff' }, 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'develop y origin/develop','rotateCommitLabel': false}} }%%
 +gitGraph
 + commit id: "A"
 + commit id: "B"
 + commit id: "C"
 + commit id: "D"
 + commit id: "E"
 + commit id: "F" 
 +</flow>
 +
  
 ==== git merge rama ==== ==== git merge rama ====
Línea 150: Línea 244:
   * Bajar (o actualizar) una rama ( como master, release o develop) desde Github,suponiendo que no va a haber problemas. Es decir que no hemos hecho nosotros un commit en ese rama desde la última vez que la bajamos.   * Bajar (o actualizar) una rama ( como master, release o develop) desde Github,suponiendo que no va a haber problemas. Es decir que no hemos hecho nosotros un commit en ese rama desde la última vez que la bajamos.
  
 +<sxh bash>
   git fetch --prune   git fetch --prune
-  git checkout develop+  git switch develop
   git merge --ff-only origin/develop   git merge --ff-only origin/develop
  
   git fetch --prune   git fetch --prune
-  git checkout release+  git switch release
   git merge --ff-only origin/release   git merge --ff-only origin/release
  
   git fetch --prune   git fetch --prune
-  git checkout master+  git switch master
   git merge --ff-only origin/master   git merge --ff-only origin/master
 +</sxh>
  
 \\ \\
Línea 168: Línea 264:
   * mergear , develop en release o release en master (suponiendo que están actualizadas ambas ramas porque las hemos actualizado con las órdenes anteriores) y que no hemos hecho commits directamente ni en release ni en master.   * mergear , develop en release o release en master (suponiendo que están actualizadas ambas ramas porque las hemos actualizado con las órdenes anteriores) y que no hemos hecho commits directamente ni en release ni en master.
  
-  git checkout release+<sxh bash> 
 +  git switch release
   git merge --ff-only develop   git merge --ff-only develop
  
-  git checkout master+  git switch master
   git merge --ff-only release   git merge --ff-only release
 +</sxh>
  
 \\ \\
Línea 180: Línea 278:
   * Mergear (rebase) los cambios de origin/develop en nuestra develop si hay commits distintos en develop y origin/develop.   * Mergear (rebase) los cambios de origin/develop en nuestra develop si hay commits distintos en develop y origin/develop.
  
 +<sxh bash>
   git fetch --prune   git fetch --prune
-  git checkout develop+  git switch develop
   git rebase origin/develop   git rebase origin/develop
 +</sxh>
  
-Lo normal es hacer el rebase cuando al hacer un ''''git push se produce el siguiente error:+Lo normal es hacer el rebase cuando al hacer un ''git push'' se produce el siguiente error:
  
    ! [rejected]        develop -> develop (fetch first)    ! [rejected]        develop -> develop (fetch first)
Línea 201: Línea 301:
  
  
-  git checkout develop+<sxh bash> 
 +  git switch develop
   git merge  --squash lorenzo_42   git merge  --squash lorenzo_42
   git commit -am "feat(#42):pantalla de Login"   git commit -am "feat(#42):pantalla de Login"
 +</sxh>
  
 <note>Recuerda hacer siempre después del ''git merge  --squash'' el commit</note> <note>Recuerda hacer siempre después del ''git merge  --squash'' el commit</note>
Línea 213: Línea 315:
   * Mergear  los cambios de develop en nuestra rama para ir solucionado los conflictos poco a poco (Antes hemos actualizado develop desde GitHub).    * Mergear  los cambios de develop en nuestra rama para ir solucionado los conflictos poco a poco (Antes hemos actualizado develop desde GitHub). 
  
-  git checkout lorenzo_42+<sxh bash> 
 +  git switch lorenzo_42
   git merge develop   git merge develop
  
 +</sxh>
 \\ \\
 \\ \\
Línea 238: Línea 342:
 Es decir que avisa que se configure para saber que hacer en caso de problemas, si con Fast-Forward, con un rebase o con merge. Así que como siempre hemos recomendado , es mejor no usar ''git pull'' ya que así decidimos nosotros que hacer o en el peor de los casos indicar para que haga siempre un ''--ff-only'' mediante al orden: Es decir que avisa que se configure para saber que hacer en caso de problemas, si con Fast-Forward, con un rebase o con merge. Así que como siempre hemos recomendado , es mejor no usar ''git pull'' ya que así decidimos nosotros que hacer o en el peor de los casos indicar para que haga siempre un ''--ff-only'' mediante al orden:
  
 +<sxh bash>
   git config --global pull.ff only   git config --global pull.ff only
 +</sxh>
  
 De esa forma podremos hacer un ''git pull'' de forma segura (siempre y cuando no estés en otro ordenador donde no lo hayan configurado así :-(). Aunque mejor aun es dehabilitar ''git pull'': [[https://stackoverflow.com/questions/22944178/can-i-disable-git-pull|Can I disable git pull?]] De esa forma podremos hacer un ''git pull'' de forma segura (siempre y cuando no estés en otro ordenador donde no lo hayan configurado así :-(). Aunque mejor aun es dehabilitar ''git pull'': [[https://stackoverflow.com/questions/22944178/can-i-disable-git-pull|Can I disable git pull?]]
Línea 264: Línea 370:
 En caso de hacer un ''git merge'' o un ''git rebase'', etc. se puede producir un conflicto. Que consiste en que git no sabe como fusionar los ficheros. En ese caso lo primero es resolver cada conflicto en cada fichero. En caso de hacer un ''git merge'' o un ''git rebase'', etc. se puede producir un conflicto. Que consiste en que git no sabe como fusionar los ficheros. En ese caso lo primero es resolver cada conflicto en cada fichero.
  
-==== Conflicto en merge ==== +Imaginemos el mismo fichero ''index.html'' en 2 ramas distintas:
-Imaginemos que queremos mergear una rama de funcionalidad sobre ''develop''.+
  
-  git checkout develop +^  Nuestra Rama    Rama a Fusionar  ^ 
-  git merge --squash feature_lorenzo_45 +| <sxh html> 
-   +<html> 
-Si hay un conflicto se producirá el siguiente mensaje: + <body> 
- + <h1>Hola mundo</h1> 
-  Auto-fusionando index.html + </body> 
-  CONFLICTO (contenido): Conflicto de fusión en index.html +</html> 
-  Commit de squash -- no actualizando HEAD +</sxh> <sxh html> 
-  Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado.+<html> 
 + <body> 
 + <h1>Adios planeta</h1> 
 + </body> 
 +</html> 
 +</sxh> |
  
-En ese caso deberemos editar el fichero ''index.html'' y arreglar el conflicto que tiene un aspecto similar al siguiente:+Cuando se produce el conflicto, el fichero resultante queda de la siguiente forma:
  
 +<sxh Diff>
   <html>   <html>
   <body>   <body>
Línea 285: Línea 396:
   =======   =======
   <h1>Adios planeta</h1>   <h1>Adios planeta</h1>
-  >>>>>>> feature_lorenzo_45+  >>>>>>> Rama a Fusionar
   </body>   </body>
   </html>   </html>
 +</sxh>
  
-Ahí se indica las lineas que debemos unificar.Y para arreglarlo hay eliminar las líneas que delimitan el conflicto.Que dando por ejemplo así: 
  
-  <html> +Ahora tenemos que decidir como resolver el conflicto que el resultado definitivo ya depende del código que estemos fusionando. Un posible resultado podría ser:
-  <body> +
-  <h1>Hola planeta</h1> +
-  </body> +
-  </html>+
  
-finalmente hacer el ''git commit''+<sxh html> 
 +<html> 
 + <body> 
 + <h1>Hola Adios mundo</h1> 
 + </body> 
 +</html> 
 +</sxh>
  
-  git commit -am "feat(#45):Nueva cabecera" 
  
- +====  git rebase rama ====
-==== Conflicto en rebase ====+
 Imaginemos que queremos mergear la rama ''origin/develop'' sobre ''develop''. Imaginemos que queremos mergear la rama ''origin/develop'' sobre ''develop''.
- 
-  git checkout develop 
-  git rebase origin/develop 
  
 Si hay un conflicto se producirá el siguiente mensaje: Si hay un conflicto se producirá el siguiente mensaje:
Línea 328: Línea 436:
 Ahora debemos como antes arreglar el conflicto editando el fichero ''index.html'' pero ahora deberemos hacer dos cosas mas: Ahora debemos como antes arreglar el conflicto editando el fichero ''index.html'' pero ahora deberemos hacer dos cosas mas:
  
 +<sxh bash>
   git add index.html    git add index.html 
   git rebase --continue   git rebase --continue
 +</sxh>
      
 Es decir añadir el fichero que ha dado el conflicto con un ''git add'' y luego hacer un ''git rebase --continue'' para que se acabe de fusionar. Es decir añadir el fichero que ha dado el conflicto con un ''git add'' y luego hacer un ''git rebase --continue'' para que se acabe de fusionar.
  
- +El ejemplo completo lo podemos ver aquí:
-El ejemplo completo lo podemos ver aqui:+
  
 <sxh bash> <sxh bash>
-#Subimos los cambios de develop +git switch develop
-git push +
-#SI da algún problema, bajamos los cambios +
-git fetch --prune +
-git checkout develop+
 git rebase origin/develop git rebase origin/develop
-#SI hay algún conflicto lo resolvemos +vi index.html  #Arreglar el conflicto 
-vi ficheroN_del_conflicto +git add index.html
-#Es necesario hacer el git add para añadir los ficheros modificados por el conflicto +
-git add ficheroN_del_conflicto +
-#Continuamos el rebase para acabar de hacer los cambios+
 git rebase --continue git rebase --continue
-#Y finalmente ya podemos subirlos 
-git push 
 </sxh> </sxh>
 \\ \\
  
  
-  * Y para acabar un ejemplo para hacer un commit , mergearlos a las otras 2 ramas y subirlo+==== git merge --squash rama ==== 
 +Imaginemos que queremos mergear una rama de una funcionalidad llamada "Lorenzo_3" sobre ''develop''.
  
 + 
 +Si hay un conflicto se producirá el siguiente mensaje:
 +
 +  Auto-fusionando index.html
 +  CONFLICTO (contenido): Conflicto de fusión en index.html
 +  Commit de squash -- no actualizando HEAD
 +  Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado.
 +
 +Ahora debemos como antes arreglar el conflicto editando el fichero ''index.html'' y hacer el commit que de todas formas ya íbamos a hacer
  
 <sxh bash> <sxh bash>
-#Bajarte la última versión de todo +  git commit -am "feat(#45):Nueva cabecera"
-git fetch --prune && git checkout develop && git merge --ff-only origin/develop && git checkout release && git merge --ff-only origin/release && git checkout master && git merge --ff-only origin/master && git checkout develop+
 </sxh> </sxh>
 +  
 +
 +El ejemplo completo lo podemos ver aqui:
 +
 <sxh bash> <sxh bash>
-#Hacer el commit +git switch develop 
-git commit -am "mensaje" +git merge --squash Lorenzo_3 
-</sxh> +vi index.html  #Arreglar el conflicto 
-<sxh bash> +git commit -am "feat(#45):Nueva cabecera"
-#Hacer los merges con las otras 2 ramas +
-git checkout release && git merge --ff-only develop && git checkout master && git merge --ff-only release +
-</sxh> +
-<sxh bash> +
-#Subir los cambios de las 3 ramas +
-git checkout master && git push && git checkout release && git push && git checkout develop && git push+
 </sxh> </sxh>
 +\\
  
  
  
-===== Mas cosas de Git ===== +==== git merge --ff-only rama ==== 
-Para acabar dejamos alguna pincelada mas de cosas que existen en Git pero que no vamos a ver:+Con un fast-forward nunca se puede producir un conflicto. 
 + 
 + 
 +==== git merge rama ==== 
 +Imaginemos que queremos mergear los cambios de ''develop'' en la rama ''Lorenzo_3'' 
 + 
 + 
 +Si hay un conflicto se producirá el siguiente mensaje:
  
-  * fixup y autosquash: https://fle.github.io/git-tip-keep-your-branch-clean-with-fixup-and-autosquash.html 
 <sxh base> <sxh base>
-git commit --fixup <commit>   +Auto-fusionando index.html 
-git rebase -i --autosquash+CONFLICTO (contenido): Conflicto de fusión en index.html 
 +Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado.
 </sxh> </sxh>
-  
  
-  * Stash+Ahora debemos como antes arreglar el conflicto editando el fichero ''index.html'' y el ''--continue'':
  
-<sxh base+ 
-git stash +<sxh bash
-git stash pop+  git add index.html  
 +  git merge --continue
 </sxh> </sxh>
 +  
 +Es decir añadir el fichero que ha dado el conflicto con un ''git add'' y luego hacer un ''git merge --continue'' para que se acabe de mergear.
  
-  * Cherry-pick 
  
  
-==== Recetas ====+El ejemplo completo lo podemos ver aqui: 
 + 
 +<sxh bash> 
 +git switch Lorenzo_3 
 +git merge develop 
 +vi index.html  #Arreglar el conflicto 
 +git add index.html  
 +git merge --continue 
 +</sxh> 
 +\\ 
 + 
 + 
 +===== Recetas =====
  
   * Bajarse lo último de las 3 ramas.   * Bajarse lo último de las 3 ramas.
  
-<sxh base+<sxh bash
-git fetch --prune && git checkout develop && git merge --ff-only origin/develop && git checkout release && git merge --ff-only origin/release && git checkout master && git merge --ff-only origin/master && git checkout develop+git fetch --prune && git switch develop && git merge --ff-only origin/develop && git switch release && git merge --ff-only origin/release && git switch master && git merge --ff-only origin/master && git switch develop
 </sxh> </sxh>
  
   * Hacer un merge de las 3 ramas   * Hacer un merge de las 3 ramas
  
-<sxh base+<sxh bash
-git checkout release && git merge --ff-only develop && git checkout master && git merge --ff-only release && git checkout develop+git switch release && git merge --ff-only develop && git switch master && git merge --ff-only release && git switch develop
 </sxh> </sxh>
  
   * Subir las 3 ramas   * Subir las 3 ramas
  
-<sxh base+<sxh bash
-git checkout master && git push && git checkout release && git push && git checkout develop && git push+git switch master && git push && git switch release && git push && git switch develop && git push
 </sxh> </sxh>
 +
 +
 +
 +
 +
  
  
clase/daw/daw/2eval/tema06.1636890322.txt.gz · Última modificación: 2021/11/14 12:45 por admin