Salta el contingut
 

Exercici: Git avançat

Joan Puigcerver Ibáñez

j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

Els objectius d'aquest exercici són:

  • Conéixer i saber aplicar els mètodes per modificar la història del repositori.
  • Conéixer com modificar el commit anterior, canviant els canvis realitzats i el seu missatge.
  • Conéixer com fusionar de branques en un sol commit.
  • Conéixer com aplicar la còpia de commits.

Lliurament

No es requereix el lliurament d'aquest exercici.

Exercici

A partir del següent repositori inicial:

jpuigcerver@fp:~/git_avancat_exericici (canvis) $ git lga
*   b1d1706 - (0 seconds ago) Merge 'canvi/C' a 'canvis' - Joan Puigcerver (HEAD -> canvis)
|\  
| *   47b307d - (0 seconds ago) Merge 'canvi/B' a 'canvi/C' - Joan Puigcerver (canvi/C)
| |\  
| | *   ab98f7b - (0 seconds ago) Merge 'canvi/A' a 'canvi/B' - Joan Puigcerver (canvi/B)
| | |\  
| | | * 4060f3a - (0 seconds ago) canviA - Joan Puigcerver (canvi/A)
| | * | dc48c81 - (0 seconds ago) Canvi B - Joan Puigcerver
| | |/  
| * / 1c6a633 - (0 seconds ago) Canvi C - Joan Puigcerver
| |/  
* / f872a43 - (0 seconds ago) Canvis - Joan Puigcerver
|/  
* cca01c4 - (0 seconds ago) Commit inicial - Joan Puigcerver (main)

Preparació repositori inicial

Danger

Crea el nou repositori en una carpeta independent per evitar problemes amb els exemples i exercicis anteriors.

Pots executar el següent script per obtenir el repositori inicial:

setup_exercici_avancat.sh
#!/bin/bash

# Elimina els repositori si existeix
if [ -d ~/git_avancat_exericici ]; then
    rm -rf ~/git_avancat_exericici
fi

mkdir -p ~/git_avancat_exericici
cd ~/git_avancat_exericici
git init
git branch -m main
echo "# Exerici Git avançat" > README.md
git add README.md
git commit -m "Commit inicial"
git branch canvis
git branch canvi/A
git branch canvi/B
git branch canvi/C
git checkout canvis
echo "__Canvis__: " >> README.md
git commit -a -m "Canvis"
git checkout canvi/A
echo "- Canvi A" >> README.md
git commit -a -m "canviA"
git checkout canvi/B
echo "- Canvi B" >> README.md
git commit -a -m "Canvi B"
git checkout canvi/C
echo "- Canvi C" >> README.md
git commit -a -m "Canvi C"
git checkout canvi/B
git merge --no-ff canvi/A
sed -i '/^<<<<<<<.*$/d; /^=======/d; /^>>>>>>>.*$/d' README.md # Elimina les marques de conflicte
git commit -a -m "Merge 'canvi/A' a 'canvi/B'"
git checkout canvi/C
git merge --no-ff canvi/B
sed -i '/^<<<<<<<.*$/d; /^=======/d; /^>>>>>>>.*$/d' README.md
git commit -a -m "Merge 'canvi/B' a 'canvi/C'"
git checkout canvis
git merge --no-ff canvi/C
sed -i '/^<<<<<<<.*$/d; /^=======/d; /^>>>>>>>.*$/d' README.md
git commit -a -m "Merge 'canvi/C' a 'canvis'"
git lga

Tasca 1

Fent ús de les ordres avançades de Git, modifica la història del repositori perquè quede com es mostra a continuació.

jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* 4060f3a - (0 seconds ago) canviA - Joan Puigcerver (canvi/A)
| * dc48c81 - (0 seconds ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 1c6a633 - (0 seconds ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
| * f872a43 - (0 seconds ago) Canvis - Joan Puigcerver (canvis)
|/  
* cca01c4 - (0 seconds ago) Commit inicial - Joan Puigcerver (HEAD -> main)

Tasca 2

Modifica el missatge del commit canviA per Canvi A.

jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* 74e873b - (0 seconds ago) Canvi A - Joan Puigcerver (canvi/A)
| * dc48c81 - (0 seconds ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 1c6a633 - (0 seconds ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
| * f872a43 - (0 seconds ago) Canvis - Joan Puigcerver (canvis)
|/  
* cca01c4 - (0 seconds ago) Commit inicial - Joan Puigcerver (HEAD -> main)

Tasca 3

Còpia els continguts dels commits Canvi A, Canvi B i Canvi C a la branca canvis.

jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* 74e873b - (0 seconds ago) Canvi A - Joan Puigcerver (canvi/A)
| * dc48c81 - (0 seconds ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 1c6a633 - (0 seconds ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
| * 98f43bf - (0 seconds ago) Canvi C - Joan Puigcerver (canvis)
| * 038b917 - (0 seconds ago) Canvi B - Joan Puigcerver
| * ff6f107 - (0 seconds ago) Canvi A - Joan Puigcerver
| * f872a43 - (0 seconds ago) Canvis - Joan Puigcerver
|/  
* cca01c4 - (0 seconds ago) Commit inicial - Joan Puigcerver (HEAD -> main)

Després, elimina les branques canvi/A, canvi/B i canvi/C

jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* 98f43bf - (0 seconds ago) Canvi C - Joan Puigcerver (canvis)
* 038b917 - (0 seconds ago) Canvi B - Joan Puigcerver
* ff6f107 - (0 seconds ago) Canvi A - Joan Puigcerver
* f872a43 - (0 seconds ago) Canvis - Joan Puigcerver
* cca01c4 - (0 seconds ago) Commit inicial - Joan Puigcerver (HEAD -> main)

Tasca 4

Fusiona la branca canvis amb la branca main en un sol commit.

Crea una etiqueta anotada amb el nom GitAvançat en aquest commit amb el missatge:

Estat final després de l'exercici de Git avançat
jpuigcerver@fp:~/git_avancat_exericici (main) $ git show GitAvançat
tag GitAvançat
Tagger: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Tue Feb 4 12:14:35 2025 +0100

Estat final després de l'exercici de Git avançat

commit 703c0ed2e01461da14bfe392db9491171430e93f
Author: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Tue Feb 4 12:14:35 2025 +0100

    Canvis A, B i C

diff --git a/README.md b/README.md
index 46444c7..e51158f 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,5 @@
 # Exerici Git avançat
+__Canvis__: 
+- Canvi A
+- Canvi B
+- Canvi C
jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* 703c0ed - (0 seconds ago) Canvis A, B i C - Joan Puigcerver (HEAD -> main, tag: GitAvançat)
| * 98f43bf - (1 second ago) Canvi C - Joan Puigcerver (canvis)
| * 038b917 - (1 second ago) Canvi B - Joan Puigcerver
| * ff6f107 - (1 second ago) Canvi A - Joan Puigcerver
| * f872a43 - (1 second ago) Canvis - Joan Puigcerver
|/  
* cca01c4 - (1 second ago) Commit inicial - Joan Puigcerver

Per últim, també pots eliminar la branca canvis

jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* 703c0ed - (0 seconds ago) Canvis A, B i C - Joan Puigcerver (HEAD -> main, tag: GitAvançat)
* cca01c4 - (1 second ago) Commit inicial - Joan Puigcerver
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.