17. Een commit verwijderen uit een branch

Doelen

  • Leren om de laatste commits van de branch te verwijderen

Revert is een krachtig commando van de vorige sectie waarmee je alle commits naar de repository kunt annuleren. Echter, zowel originele als geannuleerde commits zijn te zien in de geschiedenis van de branch (bij gebruik van het git log commando).

Vaak realiseren we ons nadat een commit al gemaakt is dat het een vergissing was. Het zou leuk zijn om een undo commando waarmee de incorrecte commit (s) onmiddellijk verwijderd kunnen worden. Dit commando zou het verschijnen van een of meer ongewenste commits in de git log geschiedenis voorkomen.

01 Het reset commando

We hebben het reset commando al gebruikt om de bufferzone en de geselecteerde commit te matchen (HEAD commit werd gebruikt in de vorige les).

Als een commit-referentie wordt gegeven (dwz een branch, hash of tag-naam), de reset commando zal …

  1. De huidige branch overschrijven zodat deze naar de juiste commit zal verwijzen
  2. Optioneel de bufferzone resetten zodat deze zal voldoen aan de gespecificeerde commit
  3. Optioneel de werkdirectory resetten zodat deze overeenkomt met de gespecificeerde commit

02 Controleer onze geschiedenis

Laten we een snelle scan maken van onze vastleggeschiedenis .

Run:

git hist

Resultaat:

We zien dat de laatste twee commits in deze branch zijn “Oeps “en” Oeps terugzetten “. Laten we ze verwijderen met het reset commando.

03 Markeer deze branch eerst

Laten we de laatste commit markeren met tag, so you can find it after removing a commit(s).

Uitvoeren:

git tag oops

04 Resetten naar vorige Oeps

In het geschiedenislogboek hierboven, de commit met de tag “v1” staat voor de “Oops” en “Revert Oops” commits. Laten we de branch naar dat punt resetten. Omdat de branch een tag heeft, kunnen we de tag-naam gebruiken in het reset-commando (als het geen tag heeft, kunnen we de hash-waarde gebruiken).

Run:

git reset --hard v1git hist

Resultaat:

Onze master branch wijst naar commit v1 en de “Revert Oops” en “Oops” commits bestaan niet langer in de branch. De --hard parameter zorgt ervoor dat de werkdirectory de nieuwe branch head weerspiegelt.

05 Niets gaat ooit verloren

Wat is er gebeurd met de verkeerde commits? Ze staan nog steeds in de repository. Eigenlijk kunnen we er nog steeds naar verwijzen. Aan het begin van de les hebben we de tag “oops” gemaakt voor de geannuleerde commit. Laten we alle commits eens bekijken.

Run:

git hist --all

Resultaat:

We kunnen zien dat de verkeerde commits zijn niet verdwenen. Ze staan niet meer in de master branch maar blijven wel in de repository. Ze zouden nog steeds in de repository staan als we ze niet tagden, maar dan konden we ze alleen met hun hash-namen noemen. Commits zonder referentie blijven in de repository totdat de garbage collection-software door het systeem wordt uitgevoerd.

06 Reset gevaren

Resets op lokale branches zijn meestal onschadelijk. De gevolgen van elk “ongeluk” kunnen worden teruggedraaid door de juiste commit te gebruiken.

Andere gebruikers die de branch delen, kunnen echter in de war raken als de branch wordt gedeeld op externe opslagplaatsen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *