Quins són els errors habituals de Git i com solucionar-los?

Desfeu els errors més freqüents mentre versioneu el codi a l'eina del sistema de versions de git i protegiu la vostra integritat de dades.

Amb el boom de tecnologia, esdevé inevitable que qualsevol persona de TI treballi simultàniament en diverses dades i les seves dades evolucionin amb el temps. També és essencial fer un seguiment de tots els canvis en les dades i estar preparats per desfer o desfer qualsevol canvi no desitjat quan sigui necessari.



Ho he de confessar, la versió de les meves dades a Git em permet ser més experimental en el desenvolupament del meu projecte. Si faig malbé, sé que git sempre té una manera de desfer i / o revertir aquesta versió del meu projecte a la forma que tenia abans de fer-ho. Cadascun La capa està dissenyada per permetre revisar, modificar i / o corregir els canvis de dades abans de moure les dades a la següent etapa. A continuació, es detallen els errors que es tracten en aquest bloc:



Desactiveu els fitxers / directoris de l’índex

Mentre afegiu i / o modifiqueu fitxers, sovint acostumeu a utilitzar el comportament predeterminat de l’ordre ‘git add’, que consisteix a afegir tots els fitxers i directoris a l’índex.Moltes vegades sentiu la necessitat de desencadenar determinats fitxers o modificar-los per última vegada abans de comprometre'ls.



Sintaxi: restabliment de git


suprimir fitxers de l’índex: errors comuns de git -Edureka

Si desactiveu els fitxers de l’àrea d’índex, us proporcionarà una altra oportunitat de tornar a treballar les vostres dades abans de comprometre’s amb un repositori local.



Editeu l'últim missatge compromès

Comandament: git commit --amend
Podeu editar el missatge de confirmació més recent sense crear-ne un de nou. Per llistar els registres de confirmació, he establert un àlies 'hist':
Comandament: git config --global alias.hist 'log --pretty = format: '% C (groc)% h% Creset% ad | % C (verd)% s% Creset% C (vermell)% d% Creset% C (blau) [% an] '--graph --decorate --date = short'x


No modifiqueu el missatge de confirmació que ja s'ha enviat a un dipòsit remot i es comparteix amb altres usuaris, ja que això faria que l'historial de confirmacions anterior no sigui vàlid i, per tant, es pugui veure afectat qualsevol treball basat en això.

He oblidat alguns canvis en la darrera confirmació

Suposem que heu oblidat fer algunes modificacions i que ja heu compromès la vostra instantània, a més, no voleu fer cap compromís per ressaltar el vostre error.
Comandament: git commit --amend


He ressaltat com s'ha recreat i canviat l'identificador sha-1 de l'objecte de confirmació recent. Vaig fingir haver fet un únic compromís barrejant tots dos canvis en un de sol.

Descarta els canvis locals

Per tant, heus aquí un cas en què he modificat el fitxer ‘README’ i l’he posat en escena. A continuació, vaig modificar el mateix fitxer per segona vegada, però em vaig adonar que no volia el segon canvi.

Ara, deixeu-me que no desfaci tot el canvi manualment, simplement puc treure la versió progressiva del fitxer.
Sintaxi:
git checkout -–Canvis locals en un fitxer
git checkout -–Canvis locals a tots els fitxers del directori & tímid i tímid

Comandament: git checkout - LLEGIR-ME

Per tant, vaig descartar els meus darrers canvis al fitxer i vaig acceptar la versió progressiva del fitxer. A la següent confirmació, només la versió progressiva del fitxer entra al dipòsit local.

Ha enviat dades personals al dipòsit local

Vull eliminar certes dades del dipòsit local, però mantenir els fitxers al directori de treball.
Sintaxi:
git reset --mixed HEAD ~
git reset --mixed

Comandament: git reset --mixed HEAD ~ 1
HEAD ~ 1 indica una confirmació just abans de la confirmació recent apuntada per la branca HEAD actual.

Els fitxers de la instantània actual s’han eliminat tant del repositori local com de l’àrea de prova. Afegiu els patrons següents al fitxer global .gitignore per evitar que git els faci un seguiment.
vim ~ / .gitignore_global
# fitxers de contrasenya #
*.passar
* .la clau
* .passwd

Amb això, s'elimina la confirmació que tenia la instantània dels fitxers de contrasenya i obtindreu una àrea d'intervenció neta. Els meus fitxers continuen presents al meu directori de treball, però ja no es troben al dipòsit local, tampoc no s'enviaran a un dipòsit remot.

Precaució: Si els perdeu, git no els pot recuperar, ja que no en sap.

Substituïu l'últim commit per un commit nou

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

L’opció ‘–soft’ només elimina els fitxers compromesos del dipòsit local mentre encara es mantenen a l’índex i els podeu tornar a confirmar després d’una revisió. és el sha-1 de la instantània que voleu eliminar de la reposició local. on n és el nombre de confirmacions abans de la confirmació HEAD

Comandament :git reset --soft HEAD ~ 1


Modifiqueu els fitxers i torneu-los a escenificar

Comandament: git commit -m 'Adding index.html and style.css'
El vostre historial de confirmacions ara resulta ser:

avantatges de la sobrecàrrega de mètodes a Java

S'han enviat les dades incorrectes

Sintaxi:
git reset --DUR HEAD ~ n–Restableix el projecte a ‘n’ commits abans de la darrera instantània compromesa
git reset --hard–Restableix el projecte a la instantània d'identificació de compromís donada

Comandament: git reset --hard HEAD ~ 1


La darrera confirmació i els fitxers danyats s’eliminen del dipòsit local, de l’àrea de prova i del directori de treball.

Precaució: És una ordre perillosa ja que acabes perdent fitxers al directori de treball. No es recomana en un dipòsit compartit remotament.

Torna al meu estat de projecte anterior

Podeu accedir a un estat més antic del vostre projecte en la història del temps. Si desaprofiteu la versió més recent o necessiteu millores en el codi anterior, és possible que vulgueu crear una altra branca a partir de la captura de pantalla del projecte anterior per no dificultar el vostre treball actual. Vegem com:
a. Enumereu l’historial del projecte i decidiu l’ordre de comanda anterior:vaja hist
b. Creeu una altra branca a partir de l'identificador de confirmació:git checkout -b old-state e7aa9a5
c. Continueu treballant en el codi i, posteriorment, combineu-lo / rebaseu-lo amb la branca 'mestra'.

Recupereu una sucursal local suprimida

És possible regenerar el treball perdut en una branca de referència. Per exemple, he suprimit la branca 'old_code' sense combinar-la amb la branca principal i he perdut la feina. I no, tampoc vaig empènyer la sucursal a un dipòsit remot, què passa? Bé, git tracks i mantingueu una entrada al diari de tots els canvis fets a cada referència. Vegem els meus:vés reflog

Per tant, HEAD @ {2} és el punter quan em vaig moure a la branca 'old_code', recuperem-ho:

Sintaxi:git checkout -b
Comandament:git checkout -b old_code HEAD @ {2}

Ara heu d'estar a la branca 'old_code' amb el vostre darrer treball en el moment de la seva creació. Addicionalment, el punter 'reflog' a HEAD @ {1} va ser la confirmació recent feta a la branca 'old_code'. commit només executeu l'ordre com:git reset: hard HEAD @ {1}.Això també restaura els fitxers modificats al directori de treball.

Si voleu conèixer en detall com funciona aquesta ordre i com podeu gestionar les entrades 'reflog', també podeu llegir la meva publicació anterior arecuperant la branca suprimida de git reflog.

Desfés els canvis fets en una confirmació

vajarevertirs'utilitza per enregistrar algunes confirmacions noves per revertir l'efecte d'algunes confirmacions anteriors.
Sintaxi: git revertir
Dels meus registres de confirmacions, voldria invertir el canvi realitzat a l'identificador de confirmació ressaltat:

Comandament: git revert 827bc0d

És millor que no restableixis '–dures 'les comissions compartides, sinó que en canvi' git revertir-les 'per conservar l'historial de manera que sigui més fàcil per a tots rastrejar els registres d'història per esbrinar què s'ha revertit. i per què?

Podeu utilitzar la mateixa lògica de referir les confirmacions referents al punter HEAD en lloc de donar-li l'identificador de confirmació, com a HEAD ~ 3 o HEAD ~ 4, etc.

Va donar un nom incorrecte a la meva sucursal

Podeu canviar el nom d’un nom de sucursal local. Passa moltes vegades que és possible que vulgueu canviar el nom de la vostra sucursal en funció del problema en què esteu treballant sense passar el dolor de migrar tot el vostre treball d'un lloc a un altre. Per exemple, podeu estar a la mateixa branca o a una branca diferent i, tot i així, poder canviar el nom de la branca desitjada com es mostra a continuació:
Sintaxi: git branch -m
Comandament: git branch -m old_code old_ # 4920

Com us podeu preguntar, git fa un seguiment d’aquest canvi de nom? Sí, fa referència a les vostres entrades 'reflog', aquí teniu les meves:

El canvi de nom d’una sucursal no afectarà la seva sucursal de seguiment remot. Veurem a la secció remota com substituir una sucursal del dipòsit remot

Torneu a organitzar els registres de l'historial abans de passar al control remot

Com m'agradaria que hagués fet certes confirmacions abans que d'altres i que no n'hagués fet cap. Torneu a organitzar i editeu els compromisos antics per solucionar o millorar el codi de manera efectiva
Sintaxi: git rebase -i
Comandament: git rebase -i fb0a90e–Inicieu a tornar a fer una revisió de les confirmacions realitzades després de l'identificador de confirmació fb0a90e

Torneu a visitar el git sobrepassi documentació per entendre en què es diferencia una rebaixa «–interactiva o -i» d'una rebaixa regular.

Comissió de canvis no relacionats en una sola confirmació

En aquest cas, heu de dividir una confirmació antiga enterrada en diverses confirmacions lògiques.
Sintaxi: git rebase -i
Comandament: git rebase -i fb0a90e
A l'editor de rebase, heu de triar l'identificador de confirmació e7aa9a5 i canviar-lo a 'edita' en lloc de 'triar'.

canvis no relacionats: errors de git comuns -Edureka

Ara estareu a la versió del projecte de commit id-e7aa9a5. En primer lloc, restableix l'historial de confirmacions i l'àrea d'intervenció a l'anterior commit-Command:git reset HEAD ~ 1
En segon lloc, editeu + stage + confieu els fitxers individualment
Ordres:
git add code && git commit -m 'Afegir codis inicials'
git add newcode && git commit -m 'Adding new code'

En tercer lloc, continueu amb la nova versió i finalitzeu.

Comandament :git sobrepassi --continue
En quart lloc, consulteu l'historial amb compromisos addicionals.

Comandament: vaja hist

dividir el commit en múltiples mitjançant rebase - errors de git comuns - Edureka

Canvieu l'autor-correu electrònic a totes les confirmacions de totes les sucursals

Des de fa temps he estat versionant i comprometent els meus fitxers de projecte a git, però fins ara mai no em va semblar que el meu identificador de correu electrònic estigués compromès en els meus registres d'historial de confirmacions que fins i tot es publiquen en dipòsits remots. Bé, això pot passar a qualsevol persona quan configureu inicialment les configuracions al fitxer '.gitconfig'. tornar a escriure les variables d'entorn que proporcionem en crear un objecte de confirmació.

Primer tinc la llista de identificadors de correu electrònic per decidir els que vull canviar:
Comandament: git log --all --pretty = format: '% an% d'–Això imprimeix el nom de l'autor (refname / branch-name)

En segon lloc, hi corro cada compromís a cada branca i torneu a escriure l'objecte commit amb el nou identificador de correu electrònic
Comandament:
git filter-branch --env-filter '
si ['$ GIT_AUTHOR_NAME' = 'divya']
llavors
GIT_AUTHOR_EMAIL = 'divya@github.com'
ser
'- --tots

Arxius perduts i trobats

Suposem que heu perdut un fitxer determinat i que no en recordeu el nom, però que recordareu algunes paraules del fitxer. En aquest cas, podeu seguir aquests passos:
Pas 1: Enumereu totes les confirmacions que mai contenien la instantània del fitxer amb el patró cercat
Comandament :git rev-list --all | xargs git grep -i 'marca de temps'



Pas 2 : Creeu una nova branca 'lost-found' a partir d'aquest commit-id ressaltat
Sintaxi: git checkout -b lost-found d8c6a76a6dcb1fc6e8c3f6b097e1bd07e7cd328f

He oblidat quina sucursal té el meu commit-id

De vegades, després de detectar un identificador de confirmació de buggy, és possible que vulgueu conèixer totes les branques que tenen aquesta confirmació perquè pugueu solucionar-les totes. La comprovació de l’historial de cada branca no és molt pràctica en un gran projecte multi-branca.

Un error de comissió realitzat a la meva aplicació de construcció de navegació un cop trencat el codi, va ser quan vaig utilitzar el Comanda 'git bisect' per detectar l'identificador de confirmació que era dolent seguit delcomandament:git branch --containsper llistar les sucursals amb aquest error de lliurament.

Per tant, ara conec totes les branques que encara tenen la confirmació incorrecta. Podria revertir o restablir aquest conjunt de canvis.

Suprimiu una confirmació de l'historial

De vegades sento la necessitat d’eliminar un compromís de la història i no deixar-ne cap rastre. No us recomanaria que proveu aquest truc en una sucursal compartida, sinó només a la vostra sucursal local.
Sintaxi: git rebase -i
Comandament :git rebase -i 93859d8
A l'editor de rebase-> substituïu 'edita' per 'deixa anar' per l'identificador de confirmació ressaltat: 69f4813

En alguns casos, aquesta reescriptura pot provocar conflictes. Heu de resoldre els conflictes i continuar endavant.

Advertiment : Aquesta és una ordre perillosa, ja que torna a escriure l'historial i pot perdre dades. Tal branca difereix de la seva contraparte remota i haurà de ser empesa amb--forçao bé--forçar amb arrendamentopció.

Va empènyer una branca equivocada al comandament a distància

Ara, això és el que vull fer: vull suprimir un fitxer branca remota i també deixeu de fer-ne el seguiment des de la meva oficina local. 'git push'Ordre quan s'utilitza amb--eliminarL'opció elimina la branca remota. Per tant, és així com obtinc la còpia local del projecte clonat -

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


Un cop s'ha suprimit la branca remota, altres persones del repositori compartit han d'actualitzar i actualitzar les seves referències remotes amb el fitxer--podaropció per eliminar les referències d'objectes que falten:git fetch --prune -v origen

En aquesta publicació, he esmentat alguns dels errors o canvis habituals que git us pot ajudar a corregir. Cada codi és únic i està desenvolupat a la seva manera, de manera que també hi ha diferents maneres d’abordar i solucionar un problema. Sempre es podria fer referència a l’oficial documentació git per entendre com diverses ordres git protegeixen el vostre codi font i com utilitzar-les de la millor manera possible.

Ara que ja heu entès els errors més habituals de Git, comproveu-ho per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació en certificació Edureka DevOps ajuda els estudiants a entendre què és DevOps i obtenir experiència en diversos processos i eines DevOps com Puppet, Jenkins, Nagios, Ansible, Xef, Saltstack i GIT per automatitzar diversos passos en SDLC.

Tens alguna pregunta? Si us plau, mencioneu-ho a la secció de comentaris d'aquest 'error Git comú' i us respondrem