Cum să mă întorc (reveni) la o mai devreme comite stivă overflow în limba rusă

Această întrebare poate fi înțeleasă în moduri diferite:

  1. Ce înseamnă să se întoarcă sau să se rostogolească: doar uite, schimba conținutul spațiului de lucru, schimba istoria Git?
  2. Ce anume rollback: spațiul de lucru (worktree), indicele (Plecari se angajeze, zona de așteptare), ramura curentă, ramura de la distanță?
  3. Care rollback poziție: un index, acesta din urmă se angajează să o comită arbitrară?

Notăm situația inițială în diagrama următoare:

A. B. C. D - angajează comandantului sucursală.
(HEAD) - HEAD pointer locație.
(I) - starea indicelui Git. Dacă Coincide c (cap) - gol. Dacă nu - conține modificări pregătite pentru următoarea comite.
(Wt) - starea (arborele de lucru) spațiu de lucru proiect. În cazul în care coincide cu (i) - nu există nici o schimbare non-indexate, în cazul în care nu același lucru - există o schimbare.
↑ denotă commit, ceea ce indică o anumită ramură sau pointer.

Aici sunt soluții, în funcție de sarcina:

Dacă aveți nevoie doar pentru a comuta la un alt comite, de exemplu, să se uite la conținutul său, suficient pentru comanda git Checkout:

Acum magazia este într-o stare de «capul separat». Pentru a comuta înapoi, utilizați numele sucursalei (de exemplu, de master):

Dacă doriți să continuați cu un alt comite, aveți nevoie de o nouă linie. Puteți trece și creați-l ca o echipă:

3.1 Este sigur - cu ajutorul unui buzunar (stash)

3.1.1 Numai non-indexate

Puteți fi scos la buzunar numai modificările care nu au fost încă indexate (adăugați comanda):

3.1.2 și nici indexată

Această comandă anulează toate modificările indexate și non-indexată în zona de lucru, depozitându-le într-un buzunar (stash).

Recuperarea modificări nu sunt salvate. ușor și simplu.

În cazul în care nu este necesară ascunzătoarea, acesta poate fi înlăturat.

După aceea, a restabili modificările sunt încă posibile, dar mai complex: Cum de a recupera o stash a scăzut în Git?

3.2 Pericol mai

Atenție! Această comandă șterge permanent modificările nesalvate curente din spațiul de lucru și din index, dacă totuși ele vor avea nevoie, utilizați git ascunzătoarea.

Aici vom folosi git reset --hard

4.1 În același timp, salvați modificările indicelui depozit:

După acest depozit indicele va conține toate modificările de la CCCCCC la dddddd. Acum puteți face un nou comite (sau mai multe), pe baza acestor modificări.

4.2 Salvați modificările în spațiul de lucru, dar nu și în index.

Această comandă se mută pur și simplu indicatorul de ramură, dar nu reflectă modificarea indicelui (acesta va fi gol).

4.3 Doar arunca schimbarea.

Atenție! Această comandă șterge permanent actuale nesalvate. În cazul în care nu Comiterea eliminat aparțin niciunei alte sucursale, acestea vor fi, de asemenea pierdute.

Recuperarea comite. Utilizați reflog git și această întrebare pentru a găsi și de a restabili comiterile; în caz contrar colectorul de gunoi le va elimina definitiv după un timp.

Utilizați comanda git renunțarea la modificări. Se creează noi comiterile, câte unul pentru fiecare revocat comite. Astfel, dacă doriți să anulați toate comite după aaaaaa: