Salta el contingut
 

Exercici: Git avançat

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

Aquest exercici permet practicar les ordres avançades de Git. En acabar, has de saber:

  • Aplicar els mètodes per a modificar la història del repositori.
  • Modificar l'últim commit, tant els canvis com el missatge.
  • Fusionar una branca en un sol commit.
  • Copiar commits d'una branca a una altra.

Lliurament

No es requereix el lliurament d'aquest exercici per a la certificació del curs.

Exercici

L'exercici parteix del repositori inicial següent:

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ó del repositori inicial

Pots executar l'script següent per a obtindre el repositori inicial:

setup_exercici_avancat.sh
#!/bin/bash

# Elimina el 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

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

Tasca 1

Utilitza les ordres avançades de Git per a modificar 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

Canvia 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

Copia 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 en la branca main amb un sol commit. Després, crea en aquest commit una etiqueta anotada amb el nom GitAvançat i el missatge següent:

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

Finalment, 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.