Come rimuovere un commit da Github

0
44

Se hai commesso accidentalmente qualcosa che non avresti dovuto fare e hai premuto su Github, ci sono ancora modi per eliminarlo o modificarlo. Di solito, non vuoi rovinare la cronologia di Git, ma in alcuni casi può essere sicuro se fatto correttamente.

Non farlo se puoi evitarlo

Rimuovere i commit dalla cronologia di Git è generalmente una cattiva idea. Git è pensato per tenere traccia di ogni versione dei tuoi file e ci sono sempre alternative alla cancellazione, come git revert, che manterranno intatta la cronologia.

Una volta che è su un repository remoto , come Github, è molto più difficile eliminare completamente il commit. Questo perché chiunque altro utilizzi il repository avrà la propria copia locale di quel repository e l'eliminazione forzata di un commit ne farà perdere la sincronizzazione.

Ci sono ancora alcuni motivi per farlo, anche se forse hai accidentalmente impegnato dati privati ​​in un repository pubblico, che sarebbe ancora visibile nella cronologia indipendentemente da ciò che fai. Causerà alcuni problemi ai tuoi colleghi, ma anche in questo caso è possibile con un push push.

Fixing Commit localmente

Se stai lavorando localmente e non hai ancora inviato le modifiche a Github, puoi reimpostare o modificare in sicurezza i commit che non sono sul telecomando. Git tiene traccia della tua directory locale, organizza le modifiche internamente e mantiene una cronologia di Git. Tutto questo viene mantenuto sincronizzato con il telecomando, ma solo quando si esegue push/pull. Github non si preoccupa dello stato del tuo repository finché non esegui il push.

< /p> Annuncio

Se hai appena commesso un errore durante il commit dei file, puoi eseguire un soft reset e fare un nuovo commit. Questo è in realtà comune e utile se si desidera unire più commit in uno, chiamato “squashing.” Se vuoi annullare completamente le modifiche, puoi farlo anche tu (con un –hard reset).

Se non hai ancora eseguito il push su Github, puoi ripristinare il commit più recente con un soft reset, che non ha alcun effetto sui tuoi file locali, ma fa in modo che tu non abbia mai eseguito il commit delle modifiche a Git in il primo posto.

git reset –soft HEAD~

Se vuoi solo aggiungere un nuovo file/modifica al commit più recente, Git ha un flag integrato per fare esattamente questo:

git commit –amend –no-edit

Ripristino (Github Safe)

Se vuoi annullare le modifiche da un commit che hai già inviato a Github, il modo sicuro per farlo è con un ripristino. Il ripristino genererà un “commit opposto,” che sostanzialmente annullerà tutte le modifiche da un commit specifico. Se hai aggiunto una riga, questa viene rimossa e se hai eliminato un file, viene aggiunto di nuovo.

Questo è sicuro perché non cambia la cronologia, ma solo aggiunge una nuova storia sopra di esso. Puoi inviare il commit di ripristino a Github e chiedere ai tuoi colleghi di eseguire git pull per ottenere gli aggiornamenti.

Innanzitutto, esegui git log per ottenere un elenco di commit:

Quindi, copia l'hash SHA1 e ripristina il commit:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Ripristino forzato (non sicuro)

Se lo vuoi davvero per rimuovere un commit, il metodo per farlo è rimuoverlo localmente e quindi forzare il push su Github. Poiché è molto pericolosoe può rovinare i repository locali del tuo collega, se lo desideri ancora, potresti dover disabilitare la protezione del ramo push push nelle impostazioni del repository di Github:

Pubblicità

Poi, puoi rimuovere il commit localmente, il che è più semplice se è l'ultimo commit:

git reset –soft HEAD~

Puoi anche fare un rebase interattivo, che è utile se il commit non è il più recente. Se il commit era, ad esempio, 12 commit fa, puoi rebase da allora, rimuovere il commit offensivo e salvare.

git rebase -i HEAD~12

Una volta che il tuo repository locale è in ordine, tu può forzare il push su Github.

git push origin master –force

Assicurati che il tuo repository sia aggiornato! Se il ramo remoto ha modifiche che non hai, verranno sovrascritti da questo push.

Potresti coordinarti con i membri del tuo team, poiché potresti dover eseguire il ping e dire loro di eseguire un recupero e un ripristino:

git fetch git reset origin/master –soft

Spostare un commit in un ramo diverso

Se hai commesso accidentalmente il commit nel ramo sbagliato e vuoi rimuovere il commit e spostalo nel ramo corretto, ci sono strumenti in Git per gestirlo. Puoi leggere la nostra guida allo spostamento dei commit per saperne di più, ma gli stessi principi si applicano se devi rimuovere completamente un commit, devi forzare il ripristino. Se stai bene con il ripristino, puoi semplicemente ripristinare e selezionare la ciliegia.