Fare accidentalmente la cosa sbagliata è molto comune quando si lavora con Git, ma fortunatamente è costruito per tenere traccia della cronologia delle versioni del tuo repository. C’è sempre un modo per annullare le modifiche apportate e se vuoi annullare un’unione Git, è piuttosto semplice.
Annullamento di un’unione Git Fondamentalmente, ci sono due modi per farlo, e tutto dipende dal fatto che tu abbia già inviato o meno le modifiche al tuo controllo del codice sorgente. Se hai già eseguito il commit e il push a un servizio come GitHub, è generalmente considerato immutabile, a meno che tu non voglia forzare il push, il che è pericoloso. Non vuoi mai “eliminare” i commit e le unioni di git vengono aggiunte come “unione di commit”. Ti consigliamo di utilizzare git revert per annullare in modo sicuro le modifiche ed eseguire il commit dell’annullamento come nuovo commit.
Tuttavia, se hai appena incasinato qualcosa a livello locale, imprecato sulla tastiera e cercato su Google una soluzione, puoi comunque eliminare in sicurezza il commit di unione e mantenere pulita la cronologia di Git con un semplice git reset.
Ripristino locale È più facile e più sicuro gestire i ripristini Git con un client Git della GUI, dove puoi facilmente vedere la cronologia del ramo. Ovviamente non è necessario, ma l’aspetto visivo aiuta quando si hanno rami complessi.
In questo esempio, vogliamo annullare l’unione del ramo della caratteristica nel ramo principale. Poiché il feature branch non è stato effettivamente toccato, vogliamo reimpostare l’etichetta del branch “main” in modo che punti all’ultimo commit.
Per fare questo, vogliamo git checkout il ramo principale, quindi ripristinare il commit precedente. La scorciatoia per questo è HEAD^, e possiamo eseguire un hard reset all’ultimo commit. Se non ti senti a tuo agio con un ripristino “distruttivo”, puoi eseguire un ripristino software e quindi eliminare manualmente le modifiche al commit di unione.
git reset –hard HEAD^
Come puoi vedere, questo elimina completamente il commit di unione e lascia intatto il ramo delle funzionalità.
Se il commit su cui devi reimpostare non è l’ultimo prima dell’attuale HEAD del ramo, puoi semplicemente copiare l’ID SHA1 per esso e reimpostare su quel commit specifico.
Ripristino di un commit già inviato Sfortunatamente, se hai già eseguito il push, non c’è modo di rimuovere il commit di unione senza sovrascrivere la cronologia del repository. Puoi eseguire gli stessi passaggi mostrati sopra e inviare al repository upstream (come GitHub) con il file –force bandiera. Ma questo è generalmente considerato distruttivo e pericoloso quando si hanno più collaboratori, poiché dovranno tutti aggiornare i propri repository locali.
L’altro modo per annullare i commit in Git è ripristinarli. Il ripristino di un commit applicherà le modifiche opposte al repository: per ogni riga aggiunta, quella riga viene rimossa. Per tutto ciò che viene eliminato, viene aggiunto di nuovo e così via. Questo inverte efficacemente il commit, con lo svantaggio che questo processo ingombra un po’ la cronologia delle versioni. In generale, tuttavia, questa è una buona pratica per invertire gli errori.
Il ripristino di un commit è piuttosto semplice. Per prima cosa, dovrai correre git log per ottenere un elenco di commit e i relativi numeri ID.
Quindi, puoi copiare l’hash SHA1 e ripristinare il commit con git revert:
git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f Dovrai inviare questo nuovo “revert commit” a GitHub per risolvere il problema.