Hoe kan ik een git-repository terugdraaien naar een specifieke commit?

Mijn repo bevat momenteel 100 commits. Ik moet de repository terugdraaien om 80 vast te leggen en alle volgende verwijderen.

Waarom?

Deze repo is bedoeld voor het samenvoegen van verschillende gebruikers. Een aantal fusies zijn binnengekomen als commits van mij, vanwege buitensporige bewerkingen. Dat was te wijten aan een verkeerde labeling van mijn externe branches, waar 3 ontwikkelaars als elkaar werden bestempeld. Ik moet naar dat punt resetten en dan naar voren trekken.

Ik wilde rebasen, zoals in dit voorbeeld: Hoe kan ik een commit op GitHub verwijderen?

Git wil echter dat ik veel aan conflicthantering doe. Is er een eenvoudigere manier?


Antwoord 1, autoriteit 100%

git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

Opmerking: Zoals in onderstaande opmerkingen staat, Het is gevaarlijk om dit te gebruiken in een samenwerkingsomgeving: je herschrijft de geschiedenis


Antwoord 2, autoriteit 3%

Om de meest recente commit ongedaan te maken, doe ik dit:

Eerst:

git log

haal de allerlaatste SHA-ID om ongedaan te maken.

git revert SHA

Dat zal een nieuwe commit creëren die precies het tegenovergestelde doet van jouw commit. Dan kun je deze nieuwe commit pushen om je app in de staat te brengen die hij ervoor was, en je git-geschiedenis zal deze wijzigingen dienovereenkomstig tonen.

Dit is goed voor een onmiddellijke herhaling van iets dat je zojuist hebt gepleegd, wat volgens mij vaker het geval is voor mij.

Zoals Mike al zei, kun je dit ook doen:

git revert HEAD

Antwoord 3, autoriteit 2%

Andere manier:

Bekijk de branch die je wilt terugzetten, en reset dan je lokale werkkopie terug naar de commit die je als laatste wilt hebben op de remote server (alles daarna gaat tot ziens). Om dit te doen, in SourceTree, klikte ik met de rechtermuisknop op de en selecteerde “Reset BRANCHNAME to this commit”.

Navigeer vervolgens naar de lokale map van uw repository en voer deze opdracht uit:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f -- tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME 

Hiermee worden alle commits gewist na de huidige in je lokale repository, maar alleen voor die ene branch.


Antwoord 4

De meeste suggesties gaan ervan uit dat je op de een of andere manier de laatste 20 commits moet vernietigen, daarom betekent het “geschiedenis herschrijven”, maar dat hoeft niet.

Maak gewoon een nieuwe branch van de commit #80 en werk in de toekomst aan die branch. De andere 20 commits blijven op de oude verweesde tak.

Als je absoluut wilt dat je nieuwe branch dezelfde naam heeft, onthoud dan dat die branch eigenlijk gewoon labels zijn. Hernoem gewoon je oude branch naar iets anders, maak dan de nieuwe branch aan op commit #80 met de naam die je wilt.


Antwoord 5

Als ik vertakkingsupdates van de master doe, merk ik dat ik soms te veel klik en ervoor zorg dat de vertakking ook in de master wordt samengevoegd. Een manier gevonden om dat ongedaan te maken.

Als je laatste commit een merge was, heb je wat meer liefde nodig:

git revert -m 1 HEAD


Antwoord 6

In github is de makkelijke manier om de remote branch te verwijderen in de github UI, onder het tabblad branches. U moet ervoor zorgen dat u de volgende instellingen verwijdert om de vertakking verwijderbaar te maken:

  1. Geen standaardtak
  2. Geen verzoeken voor het openen van een poll.
  3. Het filiaal is niet beveiligd.

Recreëer het nu in uw lokale repository om naar het vorige commit-punt te wijzen. en voeg het weer toe aan Remote Repo.

git checkout -b master 734c2b9b   # replace with your commit point

Duw vervolgens de lokale tak naar Remote

git push -u origin master

Toevoegen de standaardtak en takbescherming, enz.

Other episodes