Quali sono gli errori comuni di Git e come risolverli?



Annulla gli errori più comuni durante il controllo delle versioni del codice nello strumento di sistema di controllo delle versioni git e proteggi l'integrità dei tuoi dati.

Con il boom di tecnologia, diventa inevitabile per qualsiasi persona IT lavorare su più dati contemporaneamente ei tuoi dati sono in continua evoluzione nel tempo. È inoltre essenziale tenere traccia di ogni modifica nei dati ed essere pronti ad annullare o ripristinare qualsiasi modifica indesiderata quando necessario.

Devo confessare che il controllo delle versioni dei miei dati in Git mi permette di essere più sperimentale nello sviluppo del mio progetto. Se sbaglio, so che git ha sempre un modo per annullare e / o ripristinare quella versione del mio progetto com'era prima che facessi un casino. Ogni Il livello è progettato per consentire la revisione e la modifica e / o la correzione delle modifiche ai dati prima di spostare i dati nella fase successiva. Quindi i seguenti sono gli errori trattati in questo blog:





Annullare lo stage di file / directory da Index

Durante l'aggiunta e / o la modifica di file, spesso si tende a utilizzare il comportamento predefinito del comando 'git add', che consiste nell'aggiungere tutti i file e le directory all'indice.Molte volte si sente il bisogno di annullare lo stage di determinati file o modificarli un'ultima volta prima di eseguirne il commit.



Sintassi: git reset


rimuovere i file dall

Un-staging dei file dall'area Index ti offre un'altra possibilità di rielaborare i tuoi dati prima di impegnarti in un repository locale.



Modifica l'ultimo messaggio confermato

Comando: git commit --amend
Puoi modificare l'ultimo messaggio di commit senza crearne uno nuovo. Per elencare i log di commit, ho impostato un alias 'hist':
Comando: git config --global alias.hist 'log --pretty = format: '% C (giallo)% h% Creset% ad | % C (verde)% s% Creset% C (rosso)% d% Creset% C (blu) [% an] '--graph --decorate --date = short'x


Non modificare il messaggio di commit che è già stato inviato a un repository remoto e condiviso con altri, poiché ciò renderebbe la cronologia di commit precedente non valida e quindi qualsiasi lavoro basato su questo potrebbe essere influenzato.

Hai dimenticato alcune modifiche nell'ultimo commit

Diciamo che ti sei dimenticato di apportare alcune modifiche e hai già eseguito il commit della tua istantanea, inoltre non vuoi fare un altro commit per evidenziare il tuo errore.
Comando: git commit --amend


Ho evidenziato come l'ID sha-1 dell'oggetto commit recente è stato ricreato e modificato. Ho finto di aver fatto un singolo commit mescolando entrambe le modifiche in una.

Elimina le modifiche locali

Quindi, ecco un caso in cui ho modificato il file 'README' e l'ho messo in scena. Successivamente, ho modificato lo stesso file una seconda volta, ma mi sono reso conto che non volevo la seconda modifica.

Ora, permettetemi di non annullare l'intera modifica manualmente, posso semplicemente estrarre la versione a fasi del file.
Sintassi:
git checkout -- modifiche locali in un file
git checkout -- modifiche locali in tutti i file nella directory e timido e timido

Comando: git checkout - README

Quindi, ho scartato le mie ultime modifiche al file e ho accettato la versione a fasi del file. Nel prossimo commit, solo la versione staged del file va nel repository locale.

Dati personali impegnati nel repository locale

Voglio rimuovere alcuni dati dal repository locale ma mantenere i file nella directory di lavoro.
Sintassi:
git reset --mixed HEAD ~
git reset --mixed

Comando: git reset --mixed HEAD ~ 1
HEAD ~ 1 indica un commit appena prima del commit recente puntato dal ramo corrente HEAD.

sql e pl sql tutorial

I file nell'istantanea corrente sono stati rimossi sia dal repository locale che dall'area di gestione temporanea. Aggiungi i seguenti modelli nel file .gitignore globale per escluderli dal tracciamento di git.
vim ~ / .gitignore_global
# file di password #
*.passaggio
*.chiave
* .passwd

Con questo, il commit che aveva l'istantanea dei file delle password viene rimosso e si ottiene un'area di staging pulita. I miei file sono ancora presenti nella mia directory di lavoro ma non sono più presenti nel repository locale, inoltre non verranno spinti su un repository remoto.

Attenzione: Se li perdi, git non può recuperarli per te perché non lo sa.

Sostituisci l'ultimo commit con un nuovo commit

Sintassi: git reset --soft [/ HEAD ~ n>]

L'opzione '–soft' rimuove semplicemente i file salvati dal repository locale mentre sono ancora organizzati nell'indice e puoi eseguire nuovamente il commit dopo una revisione. è lo sha-1 dell'istantanea che desideri rimuovere dal repository locale. dove n è il numero di commit prima del commit HEAD

Comando :git reset --soft HEAD ~ 1


Modifica i file e posizionali di nuovo

Comando: git commit -m 'Aggiunta di index.html e style.css'
La tua cronologia dei commit ora risulta essere:

Hai eseguito il commit dei dati sbagliati

Sintassi:
git reset --hard HEAD ~ n- reimposta il progetto su 'n' commit prima dell'ultima istantanea di cui è stato eseguito il commit
git reset --hard- resetta il progetto allo snapshot dell'ID commit fornito

Comando: git reset --hard HEAD ~ 1


L'ultimo commit e i file danneggiati vengono rimossi dal repository locale, dall'area di gestione temporanea e dalla directory di lavoro.

Attenzione: È un comando pericoloso in quanto finisci per perdere file nella directory di lavoro. Non consigliato su un repository condiviso in remoto.

Torna allo stato del mio vecchio progetto

Puoi passare a uno stato precedente del tuo progetto nella storia del tempo. Se sbagli nell'ultima versione o hai bisogno di miglioramenti nel codice precedente, potresti voler creare un altro ramo dalla vecchia istantanea del progetto per non ostacolare il tuo lavoro attuale. Vediamo come:
un. Elenca la cronologia del progetto e decidi il vecchio ID commit, comando:vai hist
b. Crea un altro ramo fuori dall'ID commit:git checkout -b vecchio stato e7aa9a5
c. Continua a lavorare sul codice e successivamente unisci / rebase con il ramo 'master'.

Recupera un ramo locale eliminato

È possibile rigenerare il lavoro perso su un ramo di riferimento. Supponiamo che io abbia cancellato il ramo 'vecchio_codice' senza unirlo al ramo principale e abbia perso il lavoro. E no, non ho nemmeno inviato il ramo a un repository remoto, e allora? Bene, git tiene traccia e tieni una voce di diario di tutte le modifiche apportate su ogni riferimento, vediamo il mio:vai a reflog

Quindi, HEAD @ {2} è il puntatore quando sono passato al ramo 'old_code', recuperiamolo:

Sintassi:git checkout -b
Comando:git checkout -b old_code HEAD @ {2}

Ora devi essere nel ramo 'old_code' con il tuo ultimo lavoro al momento della sua creazione. Inoltre, il puntatore 'reflog' a HEAD @ {1} era il commit recente effettuato sul ramo 'old_code'. Per ripristinare questo unico commit basta eseguire il comando come:git reset --hard HEAD @ {1}.Ciò ripristina anche i file modificati nella directory di lavoro.

Se vuoi sapere in dettaglio come funziona questo comando e come puoi gestire le voci 'reflog', puoi anche leggere il mio precedente post surecuperare il ramo cancellato da git reflog.

Annulla le modifiche apportate in un commit

partireripristinareviene utilizzato per registrare alcuni nuovi commit per invertire l'effetto di alcuni commit precedenti.
Sintassi: git revert
Dai miei log dei commit, vorrei annullare la modifica apportata all'ID commit evidenziato:

Comando: git ripristina 827bc0d

È meglio non reimpostare '-hard' i commit condivisi, ma invece 'ripristinarli' per preservare la cronologia in modo che diventi più facile per tutti rintracciare i registri della cronologia per scoprire cosa è stato ripristinato, da chi e perché?

È possibile utilizzare la stessa logica di riferimento ai commit relativi al puntatore HEAD invece di fornire l'id del commit, come in HEAD ~ 3 o HEAD ~ 4 e così via.

Ha dato un nome sbagliato alla mia filiale

È possibile rinominare un nome di filiale locale. Accade così tante volte che potresti voler rinominare il tuo ramo in base al problema su cui stai lavorando senza dover passare il dolore di migrare tutto il tuo lavoro da una posizione all'altra. Ad esempio, potresti essere sullo stesso ramo o su un ramo diverso ed essere ancora in grado di rinominare il ramo desiderato come mostrato di seguito:
Sintassi: git branch -m
Comando: git branch -m old_code old_ # 4920

programmi java per la serie fibonacci

Come potresti chiederti, git tiene traccia di questa rinomina? Sì, si riferisce alle tue voci 'reflog', ecco la mia:

Rinominare un ramo non influirà sul suo ramo di monitoraggio remoto. Vedremo nella sezione remota come sostituire un ramo sul repository remoto

Riorganizza i log della cronologia prima di eseguire il push in remoto

Come vorrei aver fatto alcuni commit prima di altri e non avrei fatto alcuni commit affatto. Riorganizza e modifica in modo interattivo i vecchi commit per correggere o migliorare efficacemente il codice
Sintassi: git rebase -i
Comando: git rebase -i fb0a90e–Start ribasare i commit effettuati dopo il commit-id fb0a90e

Visita di nuovo il file git rebase documentazione per capire in che modo un rebase '-interactive o -i' è diverso da un rebase regolare.

Modifiche non correlate confermate in un singolo commit

In questo caso, è necessario dividere un vecchio commit sepolto in più commit logici.
Sintassi: git rebase -i
Comando: git rebase -i fb0a90e
Nell'editor rebase, devi scegliere e7aa9a5 commit id e cambiarlo in 'edit' invece di 'pick'.

modifiche non correlate - errori comuni di git -Edureka

Ora ti trovi nella versione del progetto di commit id-e7aa9a5. Innanzitutto, reimposta la cronologia di commit e l'area di staging al comando commit precedente:git reset HEAD ~ 1
Secondo, modifica + stage + commit i file individualmente
Comandi:
git aggiungi codice && git commit -m 'Aggiunta di codici iniziali'
git add newcode && git commit -m 'Adding new code'

Terzo, continua il rebase e termina.

Comando :git rebase --continue
Quarto, visualizza la cronologia con ulteriori commit.

Comando: vai hist

dividere il commit in più usando rebase - errori comuni di git - Edureka

Cambia l'email dell'autore in tutti i commit su tutti i rami

Eseguo il controllo delle versioni e il commit dei file di progetto in git da molto tempo, ma fino ad ora non mi è mai sembrato che il mio ID e-mail fosse compromesso nei log della cronologia dei commit che sono persino pubblicati su repository remoti. Bene, questo può accadere a chiunque quando inizialmente si impostano le configurazioni nel file '.gitconfig'. Per il mio sollievo git può riscrivere le variabili di ambiente che forniamo durante la creazione di un oggetto commit.

Per prima cosa ottengo l'elenco dei file ID email per decidere quali voglio cambiare:
Comando: git log --all --pretty = formato: '% an% d'–Questo stampa il nome dell'autore (refname / branch-name)

Secondo, corro ogni commit su ogni ramo e riscrivi l'oggetto commit con il nuovo ID email
Comando:
git filter-branch --env-filter '
se ['$ GIT_AUTHOR_NAME' = 'divya']
poi
GIT_AUTHOR_EMAIL = 'divya@github.com'
essere
' -- --tutti

File persi e trovati

tipi di operatori in javascript

Supponiamo di aver perso un determinato file e di non ricordarne il nome, ma di poter richiamare alcune parole nel file. In questo caso, puoi seguire questi passaggi:
Passo 1: Elenca tutti i commit che hanno mai contenuto l'istantanea del file con il modello cercato
Comando :git rev-list --all | xargs git grep -i 'timestamp'



Passo 2 : Crea un nuovo ramo 'perso-trovato' da questo commit-id evidenziato
Sintassi: git checkout -b lost-found d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

Ho dimenticato quale ramo ha il mio commit-id

A volte, dopo aver rilevato un ID commit difettoso, potresti anche voler conoscere tutti i rami che hanno questo commit su di loro in modo da poterli riparare tutti. Controllare la cronologia di ogni filiale non è molto pratico in un grande progetto multi-ramo.

Un cattivo commit fatto nella mia applicazione di creazione di navigazione una volta ha rotto il codice, è allora che ho usato il Comando 'git bisect' per rilevare l'id del commit che era errato seguito dalcomando:git branch --containsper elencare i rami con quel cattivo commit.

Quindi, ora che conosco tutti i rami che hanno ancora il commit errato, potrei ripristinare o ripristinare questo changeset.

Elimina un commit dalla cronologia

A volte sento il bisogno di cancellare un impegno dalla storia e non lasciarne traccia. Non ti consiglierei di provare questa acrobazia su un ramo condiviso ma solo sul tuo ramo locale.
Sintassi: git rebase -i
Comando :git rebase -i 93859d8
Nell'editor rebase-> sostituisci 'edit' con 'drop' per l'id del commit evidenziato: 69f4813

In alcuni casi, questa riscrittura può provocare conflitti. È necessario risolvere i conflitti, quindi procedere oltre.

avvertimento : Questo è un comando pericoloso in quanto riscrive la cronologia e potrebbe perdere dati. Tale ramo è diverso dalla sua controparte remota e dovrà essere inviato con il--vigoreo--force-with-leaseopzione.

Spinto un ramo sbagliato al telecomando

Ora, ecco cosa voglio fare: voglio eliminare un file ramo remoto e smetti anche di tracciarlo dalla mia filiale locale. 'git push'Comando quando usato con il--Eliminal'opzione elimina il ramo remoto Quindi, è così che ottengo la copia locale del progetto clonato -

git clone https://github.com/greets/myProj.git
cd myProj


Una volta che il ramo remoto viene eliminato, gli altri nel repository condiviso devono aggiornare e aggiornare i propri riferimenti remoti con l'estensione--fessoopzione per eliminare i riferimenti agli oggetti mancanti:git fetch --prune -v origin

In questo post, ho menzionato alcuni degli errori o delle modifiche comuni che git può aiutarti a correggere. Ogni codice è unico e sviluppato a modo suo, quindi ci sono anche diversi modi per affrontare e risolvere un problema. Potresti sempre fare riferimento all'ufficiale documentazione git per capire come i vari comandi git proteggono il tuo codice sorgente e come utilizzare i comandi nel miglior modo possibile.

Ora che hai compreso gli errori comuni di Git, dai un'occhiata a questo da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione sulla certificazione DevOps di Edureka aiuta gli studenti a capire cos'è DevOps e ad acquisire esperienza in vari processi e strumenti DevOps come Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack e GIT per l'automazione di più passaggi in SDLC.

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questi 'errori comuni di Git' e ti risponderemo