Che cos’è un dangling commit

di Lorenzo Neri

Che cos’è un dangling commit? Quel commit che potresti avere perso per sempre. In questo articolo ti spiego cosa sono e come recuperarli.

Ti è mai capitato nella vita di perdere un commit all’interno di un branch del tuo repository gestito in git?
Ecco, purtroppo delle volte può succedere: git non è perfetto, può capitare anche a lui di farti fare casino.

Eppure, possiamo recuperare questi commit persi nel baratro: come?

Diciamo attraverso una serie di errori che io stesso ho fatto diverse volte e ne ho scritto tanti articoli a riguardo.

Mi presento: mi chiamo Lorenzo Neri e sono un informatico. Mi occupo di realizzare tutti quei contenuti che permettono a persone come te di padroneggiare l’arte del nuovo millennio, l’informatica!

Dicevo prima che ci sono stati tanti errori che ho fatto nella mia vita, ma a un certo punto ho deciso di farne una serie di articoli per aiutare persone come te a trovare una soluzione, che sono riuscito a creare o trovare proprio grazie ai miei stessi errori.

Ciò detto, cerchiamo di capire che cos’è un dangling commit e come si possa recuperare.

Perché si formano?

Prima ancora di capire cosa sono, che è la parte più semplice, è giusto chiarire del tutto perché i dangling commit si formano.

Quando ti metti all’opera all’interno del tuo repository, potresti per errore, disattenzione, o altro, interrompere il processo di alcune operazioni dando vita a dei blob intermediari.

Questi blob intermediari li possiamo definire come un tentativo di non perdere informazioni da parte di git: detta in modo un po’ volgare e meno tecnichese come se fosse un tentativo di sanare un aborto spontaneo.

E quindi?

E quindi ecco che cos’è un dangling commit

Si tratta sostanzialmente di un insieme di informazioni che non sono referenziate da nessun branch o stash.


Di fatto, piccola digressione, in questo articolo parlo proprio di come recuperare un dropped stash: può tornarti utile.

Torniamo a noi.

All’interno di git c’è un garbage collector che ci permette non solo di vedere i dangling commit ma anche di capire che cosa c’è al loro interno.

Se lanci il comando:

git fsck --no-reflog

Otterrai tutti quei dangling commit e blob non referenziati da nessun branch o stash appunto:

Checking object directories: 100% (256/256), done.
dangling commit 0dd4695b07f6f612cf57081c8c164416a9a8fb57
dangling commit 979a8e64dc247b9876c68d06db61ff96f2cdd303
dangling blob bf9c2f9c4383d089f0aedc5ca6fb0f2a3df015fb
dangling commit 5da6f8cdf57995dc9fd7ef22822a1a40844c5b17
dangling blob ece2bc1a3eade5e2ece37e16b6ef25d5095d6e3d
dangling commit 7ac9e14193de44c1466a5762128482173e7b1d90

Una volta capito che cos’è un dangling commit e come si forma, vediamo anche il suo contenuto.

Per esempio:

git show 0dd4695b07f6f612cf57081c8c164416a9a8fb57

Mi mostrerà le varie informazioni del commit con l’hash selezionato:

commit 0dd4695b07f6f612cf57081c8c164416a9a8fb57
Author: Lorenzo Neri (Istorn)
Date:   Fri May 21 11:44:17 2021 +0200
    file feature
diff --git a/feature.txt b/feature.txt
new file mode 100644
index 0000000..e69de29

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più