Exercici: Git avançat
(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.