Salta el contingut
 

Exercici: Git avançat

Autor: Joan Puigcerver Ibáñez

Correu electrònic: 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.

Exercici

A partir del següent repositori inicial:

jpuigcerver@fp:~/git_avancat_exericici (canvis) $ git lga
*   a606c9b - (0 seconds ago) Merge 'canvi/C' a 'canvis' - Joan Puigcerver (HEAD -> canvis)
|\  
| *   d53c298 - (0 seconds ago) Merge 'canvi/B' a 'canvi/C' - Joan Puigcerver (canvi/C)
| |\  
| | *   6117be3 - (1 second ago) Merge 'canvi/A' a 'canvi/B' - Joan Puigcerver (canvi/B)
| | |\  
| | | * e9902d3 - (1 second ago) canviA - Joan Puigcerver (canvi/A)
| | * | 47c3abe - (1 second ago) Canvi B - Joan Puigcerver
| | |/  
| * / 2ff2d5d - (1 second ago) Canvi C - Joan Puigcerver
| |/  
* / 1ea8b07 - (1 second ago) Canvis - Joan Puigcerver
|/  
* 33e06bb - (1 second ago) Commit inicial - Joan Puigcerver (main)

Preparació repositori inicial

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
* e9902d3 - (1 second ago) canviA - Joan Puigcerver (canvi/A)
| * 47c3abe - (1 second ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 2ff2d5d - (1 second ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
| * 1ea8b07 - (1 second ago) Canvis - Joan Puigcerver (canvis)
|/  
* 33e06bb - (1 second 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
* ddbc142 - (1 second ago) Canvi A - Joan Puigcerver (canvi/A)
| * 47c3abe - (1 second ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 2ff2d5d - (1 second ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
| * 1ea8b07 - (1 second ago) Canvis - Joan Puigcerver (canvis)
|/  
* 33e06bb - (1 second 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
* ddbc142 - (1 second ago) Canvi A - Joan Puigcerver (canvi/A)
| * a45b26b - (1 second ago) Canvi C - Joan Puigcerver (canvis)
| * ad44b74 - (1 second ago) Canvi B - Joan Puigcerver
| * 01d6f19 - (1 second ago) Canvi A - Joan Puigcerver
| * 1ea8b07 - (1 second ago) Canvis - Joan Puigcerver
|/  
| * 47c3abe - (1 second ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 2ff2d5d - (1 second ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
* 33e06bb - (1 second 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.

jpuigcerver@fp:~/git_avancat_exericici (main) $ git lga
* ddbc142 - (1 second ago) Canvi A - Joan Puigcerver (canvi/A)
| * a45b26b - (1 second ago) Canvi C - Joan Puigcerver (canvis)
| * ad44b74 - (1 second ago) Canvi B - Joan Puigcerver
| * 01d6f19 - (1 second ago) Canvi A - Joan Puigcerver
| * 1ea8b07 - (1 second ago) Canvis - Joan Puigcerver
|/  
| * dcccfbc - (0 seconds ago) Canvis A, B i C - Joan Puigcerver (HEAD -> main, tag: GitAvançat)
|/  
| * 47c3abe - (1 second ago) Canvi B - Joan Puigcerver (canvi/B)
|/  
| * 2ff2d5d - (1 second ago) Canvi C - Joan Puigcerver (canvi/C)
|/  
* 33e06bb - (1 second ago) Commit inicial - Joan Puigcerver