Full Stack

Vedere la cronologia delle modifiche in Git

Autore

Manuel Ricci

Mentre git status ci mostra lo stato della working directory e della staging area per vedere la cronologia di Git dobbiamo usare il comando

1$ git log

Log può essere personalizzato con l’ausilio dei flag a disposizione e più avanti ne vedremo alcuni.

Capiamo l’output

L’output che ci viene mostrato ci mostra informazioni abbastanza comprensibili: autore, data e il messaggio che aggiungiamo in fase di commit.

C’è però un’altra informazione che dobbiamo capire meglio:

  • commit fbcfe0b85eae76fe08136cb7c6dee382c4057846 (HEAD -> master)
  • commit bdc5f468cc1b06f45582d2ad992e99a61af1703e

Cosa vogliono dire tutti questi caratteri? I 40 caratteri dopo commit sono un checksum SHA-1 del contenuto della commit stessa.

Il checksum ha due scopi:

  • Garantire l’integrità del commit. In caso di corruzione il checksum sarebbe differente.
  • Funge da ID univoco

Mentre (HEAD -> master) indica la commit corrente nella branch master.

Cos'è lo SHA-1?

L’avevo già nominato prima, durante l’esplorazione della git directory, ma cos’è esattamente questo SHA-1? Ve lo spiego subito…

SHA sta per Secure Hash Algorithm e indica un gruppo di funzioni crittografiche di hash sviluppate dalla NSA nel 1993.

Le SHA in totale sono cinque, nello specifico:

  • SHA-1
  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512

Il numero indica il numero di bit dell’output, tranne per 1 dove il numero di bit è di 160.

La peculiarità dell’algoritmo di hash è che non è revertibile e che non sia possibile creare due messaggi diversi dallo stesso hash.

Flag di git log da tenere a mente

git log è un comando ricchissimo di comandi e placeholder (quest’ultimi servono a personalizzare il formato del messaggio). Alcune però, come sempre, sono più importanti di altre, ed eccole qui di seguito:

  • --pretty=<format>: mostra il contenuto del log in un determinato formato (es. short, medium, full, fuller, email, raw)
  • -n (--max-count=<numero>): Il numero di commit da mostrare
  • --since=<date> e --after=<date>: mostra le commit successive ad una determinata data
  • --until=<date> e --before=<date>: mostra le commit precedenti ad una determinata data
  • --author: filtra le commit per uno specifico autore
  • --all: per vedere tutte le commit
  • --graph: Disegna una rappresentazione grafica della cronologia dei commit sul lato sinistro dell'output.

Mentre per quanto riguarda i placeholder:

  • %h: hash del commit abbreviato (%H per invece averlo completo)
  • %d: decoratori del commit (branch heads o tag)
  • %ad: data autore
  • %s: commento
  • %an: nome autore

Questi sono assegnabili a --pretty per costruire il log in base alle proprie preferenze, come ad esempio:

1$ git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short

Una lista completa dei placeholder la trovate qui.

Consiglio tra l’altro di dare una letta anche alla parte di semplificazione della cronologia riportata nella documentazione di git log. Potrebbe non servirvi mai, ma è solo per flexare un pochino sulle potenzialità smisurate di git.

Conclusioni

A questo punto un po’ di modifiche alla nostra working directory e git directory sono state fatte, nella prossima lezione ritorneremo ad esplorare la cartella .git per vedere cosa è successo nel frattempo.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.