Verwijder commits vanuit een bijkantoor in Git

stemmen
2k

Ik zou graag willen weten hoe om te verwijderen een commit.

Door delete, ik bedoel het is alsof ik niet maken dat begaan, en toen ik een duw in de toekomst zal mijn wijzigingen niet druk om de remote branch.

Ik lees git hulp, en ik denk dat het bevel ik moet gebruiken is git reset --hard HEAD. Is dit correct?

De vraag is gesteld op 27/08/2009 om 04:39
bron van user
In andere talen...                            


29 antwoorden

stemmen
3k

Let op: git reset --hard UW veranderingen in je werkmappen DELETE . Zorg ervoor dat alle lokale wijzigingen die u wilt behouden verstoppen voordat u deze opdracht.

Ervan uitgaande dat je zit op die commit, dan zal deze opdracht is wack ...

git reset --hard HEAD~1

De HEAD~1middelen voor het verbinden weg.

Of zou je kijkt naar de uitgang van git log, het vinden van de commit id van de commit die je wilt back-up maken, en dan doe je dit:

git reset --hard <sha1-commit-id>

Als u al tegen elkaar geschoven, moet u een kracht push doen om zich te ontdoen van het ...

git push origin HEAD --force

Echter , als anderen het kan hebben getrokken, dan zou je beter af zijn het starten van een nieuwe tak te zijn. Want als ze trekken, zal het alleen maar samenvoegen in hun werk, en je zal het weer omhoog geduwd te krijgen.

Als u al geduwd, kan het beter zijn om te gebruiken git revert, om een "spiegelbeeld" te creëren plegen die de veranderingen ongedaan te maken. Toch zullen beide commits in het logboek.


FYI - git reset --hard HEADis geweldig als je wilt om zich te ontdoen van het onderhanden werk te krijgen. Het zal u terug naar de meest recente reset te plegen, en alle veranderingen in uw werk boom en index te wissen.


Ten slotte, als je nodig hebt om uit te vinden een commit dat u "verwijderd", het is typisch aanwezig in git reflog, tenzij je opgeschoond uw repository.

antwoordde op 27/08/2009 om 04:44
bron van user

stemmen
588

Als u nog niet hebben geduwd de commit waar dan ook, kunt u git rebase -iverwijderen die commit. In de eerste plaats weten te komen hoe ver terug dat begaan is (ongeveer). Dan doen:

git rebase -i HEAD~N

De ~Nmiddelen rebase de laatste Ncommits ( Nmoet een getal zijn, bijvoorbeeld HEAD~10). Vervolgens kunt u het bestand dat Git presenteert u verwijderen de gewraakte plegen te bewerken. Over het opslaan van dat bestand, zal Git dan herschrijven alle volgende commits alsof degene die je verwijderde niet bestond.

De Git Book heeft een goed hoofdstuk over rebasen met foto's en voorbeelden.

Wees voorzichtig met dit maar, want als je iets dat je verandert hebt elders geduwd, een andere benadering nodig zullen zijn, tenzij u van plan bent om een kracht push te doen.

antwoordde op 27/08/2009 om 04:51
bron van user

stemmen
406

Een andere mogelijkheid is een van mijn persoonlijke favoriete opdrachten:

git rebase -i <commit>~1

Dit zal de voering in de interactieve modus te starten -iop het punt net voor de commit die je wilt slaan. De editor zal opstarten met alle van de commits sindsdien. De regel met de commit die je wilt wissen en sla het bestand te verwijderen. Voeringsmateriaal zal de rest van het werk te doen, het verwijderen van alleen die commit, en afspelen alle anderen terug in het logboek.

antwoordde op 27/08/2009 om 04:49
bron van user

stemmen
276

Ik doe dit antwoord voegen, want ik zie niet in waarom iemand die net heeft geprobeerd om het werk te plegen zou willen al dat werk te schrappen als gevolg van een fout gebruik van Git!

Als u wilt uw werk te houden en gewoon 'ongedaan te maken' dat commit commando (je gevangen voordat pushen om repo):

git reset --soft HEAD~1

Gebruik niet de --hard vlag, tenzij u wilt uw werk te vernietigen, omdat de laatste commit.

antwoordde op 15/10/2012 om 19:17
bron van user

stemmen
46

Als u geen wijzigingen heeft gepubliceerd, te verwijderen laatste commit, kun je doen

$ git reset --hard HEAD^

(Merk op dat dit ook alle vastgelegde veranderingen zouden te verwijderen; met zorg gebruiken).

Indien u reeds gepubliceerde to-be-verwijderd plegen, gebruik git revert

$ git revert HEAD
antwoordde op 27/08/2009 om 11:47
bron van user

stemmen
40

Het verwijderen van een hele plegen

git rebase -p --onto SHA^ SHA

Uiteraard vervang "SHA" met de referentie die u wilt zich te ontdoen van. De "^" in die opdracht is letterlijke.

http://sethrobertson.github.io/GitFixUm/fixup.html

antwoordde op 31/08/2015 om 19:36
bron van user

stemmen
31
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId verwijst degene die u wilt om terug te keren

antwoordde op 16/10/2014 om 10:51
bron van user

stemmen
29

Als u wilt vast te stellen van uw laatste plegen, kunt u ongedaan maken van de te plegen, en unstagen de bestanden in het, door te doen:

git reset HEAD~1

Dit zal je archief terug te keren naar de staat van vóór de git commando's die de bestanden geënsceneerd toe te voegen. Uw wijzigingen worden in je werkmap. HEAD ~ 1 naar de commit onder het huidige punt van de vertakking.

Als u wilt uncommit N verbindt, maar de code veranderingen in je werkmap houden:

git reset HEAD~N

Als u wilt om zich te ontdoen van je laatste commit, en willen niet de wijzigingen in de code te houden, kun je een "harde" reset.

git reset --hard HEAD~1

Ook als u wilt weggooien de laatste N verbindt, en willen niet de wijzigingen in de code te houden:

git reset --hard HEAD~N
antwoordde op 31/05/2014 om 08:19
bron van user

stemmen
19

Krachtig Geschiedenis Change

Ervan uitgaande dat je niet alleen wilt verwijderen van de laatste commit, maar u specifieke commits van de laatste n commits, ga met verwijderen:

git rebase -i HEAD~<number of commits to go back>, Dus git rebase -i HEAD~5als je wilt de laatste vijf commits zien.

Toen in de teksteditor verander het woord pickom dropnaast iedere commit die je wilt verwijderen. Opslaan en sluit de editor. Voila!

Additief Geschiedenis Change

Proberen git revert <commit hash>. Revert zal leiden tot een nieuwe commit die ongedaan de opgegeven plegen.

antwoordde op 15/06/2017 om 23:01
bron van user

stemmen
15

Stel dat we willen commits 2 en 4 van de repo te verwijderen.

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

Opmerking: U moet beheerdersrechten hebben meer dan de repo , omdat je gebruikt --harden -f.

  • git checkout b3d92c5 Afrekenen de laatste bruikbare plegen.
  • git checkout -b repair Maak een nieuwe tak aan te werken.
  • git cherry-pick 77b9b82 Ren door plegen 3.
  • git cherry-pick 2c6a45b Ren door plegen 1.
  • git checkout master Afrekenen meester.
  • git reset --hard b3d92c5 Reset meester te duren bruikbaar te plegen.
  • git merge repair Samenvoegen onze nieuwe vestiging op meester.
  • git push -f origin master Duw master naar de remote repo.
antwoordde op 05/09/2017 om 07:19
bron van user

stemmen
14
git rebase -i HEAD~2

Hier '2' is het aantal commits je wilt rebase.

'git rebase -i HEAD`

als je wilt alle commits rebase.

Dan zul je in staat zijn om een ​​van deze opties te kiezen.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

Deze lijnen kunnen opnieuw worden besteld; zij worden uitgevoerd van boven naar beneden. Als je hier een lijn die commit zullen verloren te verwijderen. Echter, als je alles te verwijderen, de rebase zal worden afgebroken. Merk op dat lege commits worden uitgecommentarieerd

U kunt gewoon verwijderen die zich verplichten het gebruik van de optie "d" of een lijn die heeft je commit verwijderen.

antwoordde op 18/05/2016 om 23:39
bron van user

stemmen
11

Om te verwijderen in de lokale tak, gebruik

git reset --hard HEAD~1

Verwijderen in een remote branch Gebruik

git push origin HEAD --force
antwoordde op 28/08/2014 om 17:06
bron van user

stemmen
7

De fout:

I git rebase -i --root'ed mijn tak, onwetend denken dat ik kon herformuleren de eerste commit verschilt van de master (de GitHub for Windows standaardweergave is de vergelijking te beheersen, het verbergen van het geheel).

Ik ben opgegroeid een Silicon Valley baard terwijl 900+ commits zich geladen in Sublime. Afsluiten zonder veranderingen, ik factureerden mijn batterij toen doorgelopen te scheren, omdat alle 900+ individuele commits nonchalant gerebased - hun plegen keer resetten nu.

Vastbesloten Git slaan en behoud van de oorspronkelijke tijden, ik verwijderde deze lokale repository en opnieuw gekloneerd uit de afstandsbediening.

Nu is het opnieuw had toegevoegd een meest recente onnodige committeren aan de knie die ik wilde verwijderen, dus ging zoals zo.

Vermoeiend de opties:

Ik wilde niet git revert- het zou leiden tot een extra plegen, waardoor Git de overhand.

git reset --hard HEADdeed niets, na controle van de reflog, de laatste en enige HEADwas de kloon - Git wint.

Om de meest recente SHA te krijgen, Ik controleerde de remote repository op github.com - kleine overwinning.

Na lang nadenken git reset --hard <SHA>had gewerkt, werkte ik een andere tak te beheersen en 1 ... 2 ... poef! de commit terug was - Git wint.

Regelmatig terug naar meester, tijd om te proberen git rebase -i <SHA>, dan verwijder de regel ... het mocht niet baten, triest om te zeggen. " Als je hier een lijn die commit ZULLEN VERLOREN verwijderen ". Ah ... verdoezeld nieuwe functie trol de n00b in de 2.8.3 release notes .

De oplossing:

git rebase -i <SHA>dan d, drop = remove commit.

Om te controleren, checkte ik naar een ander kantoor, en voila - geen schuilplaats committeren aan te halen / te trekken van de meester.

https://twitter.com/holman/status/706006896273063936

Goede dag voor jou.

antwoordde op 25/05/2016 om 20:33
bron van user

stemmen
7

Hier is een andere manier om dit te doen:

Afrekenen de tak die u wilt terugkeren, dan stelt u uw lokale werkkopie terug naar de commit die u wilt het meest recente verslag over de externe server (alles na het zal gaan bye-bye) zijn. Om dit te doen, in SourceTree Ik klikte op de en de geselecteerde "Reset BRANCHNAME om dit te plegen". Ik denk dat de command line is:

git reset --hard COMMIT_ID

Omdat je gewoon uitgecheckt uw kantoor op afstand, je bent niet van plan om geen lokale wijzigingen zorgen te maken over het verliezen hebben. Maar dit zou ze te verliezen als je dat deed.

Navigeer vervolgens naar het lokale telefoonboek van uw repository en voer je dit commando:

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

Hierdoor worden alle commits na de huidige in uw lokale repository, maar alleen voor die ene tak te wissen.

antwoordde op 13/05/2013 om 18:20
bron van user

stemmen
7

Alle bovenstaande opdrachten herstel van de status van uw werk boom en index als ze voor het maken van de commit waren, maar de toestand van de repository niet herstellen. Als je kijkt naar het, de "verwijderd" te plegen is niet echt verwijderd, het is gewoon niet de ene op de punt van de huidige tak.

Ik denk dat er geen middelen om te verwijderen een commit met porseleinen commando's . De enige manier is om het uit het logboek te verwijderen en reflog en vervolgens naar een uit te voeren git prune --expire -now.

antwoordde op 04/10/2012 om 08:19
bron van user

stemmen
5

Wilt u de geschiedenis, met vermelding van de commit en de revert, moet u gebruiken:

git revert GIT_COMMIT_HASH

Type het bericht dat uit te leggen waarom je terugkeert en vervolgens:

git push  

Wanneer u geven git logje zowel de "verkeerde" te plegen en terugkeren log berichten te zien.

antwoordde op 07/01/2015 om 15:13
bron van user

stemmen
5

Als je gewoon verknald je laatste commit (verkeerde boodschap, vergat enkele wijzigingen toe te voegen) en wil om het te repareren voordat duwen naar een openbare repo waarom niet te gebruiken:

git commit --amend -m "New message here"

Als je onlangs hebt opgevoerd veranderingen zullen ze worden gecombineerd met de laatste commit (die u probeert te ontdoen van) en zal vervangen die commit.

Natuurlijk, als je wijziging een commit nadat je het hebt geduwd, je bent herschrijven van de geschiedenis, dus als je dat doet moet u de gevolgen te begrijpen.

U kunt ook langs de optie '--no-edit' in plaats van '-m' als u liever naar de vorige commit boodschap te gebruiken.

Documenten: http://git-scm.com/docs/git-commit.html

antwoordde op 27/05/2014 om 00:24
bron van user

stemmen
3

Bron: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

Verwijder de laatste commit

Bijvoorbeeld je laatste commit

git push origin + aa61ab32 ^: meester

Nu wilt u verwijderen deze commit dan een gemakkelijke manier om dit volgende te doen

Stappen

  1. Eerst reset de afslag naar de ouder van de huidige commit

  2. Geforceerd duwen op de afstandsbediening.

git reset HEAD^ --hard

git push origin -f

Voor speciale plegen, u wilt resetten volgt

git reset bb676878^ --hard

git push origin -f
antwoordde op 22/06/2018 om 13:40
bron van user

stemmen
2

Wat ik doe meestal als ik begaan en push (als iemand duwde zijn begaan dit op te lossen het probleem):

git reset --hard HEAD~1

git push -f origin

hoop dat dit helpt

antwoordde op 14/06/2017 om 09:22
bron van user

stemmen
1

Als je al hebt geduwd, eerst vinden de commit die je wilt worden op HEAD ($ GIT_COMMIT_HASH_HERE) , voer het volgende:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

Dan elke plaats de repo is gekloond, uit te voeren:

git reset --hard origin/master
antwoordde op 30/01/2017 om 00:25
bron van user

stemmen
0
// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

Referentie: Hoe kan ik een te verwijderen plegen in git, lokale en externe

antwoordde op 26/06/2019 om 15:46
bron van user

stemmen
0

Ik heb al geduwd. Moet een aantal commits remotly terugkeren. Hebben geprobeerd vele variaties, maar alleen deze van Justin via git bush werkt prima voor mij:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
antwoordde op 08/02/2019 om 21:29
bron van user

stemmen
0

delete lokale plegen

Zoals je kunt zien op de afbeelding Ik wil revert verwijderen "test change 2" te plegen (SHA1 ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (je kunt SHA1 ID krijgen door gebruik gitkcommando in git bash)).

Voor die ik kan gebruiken (. Alle volgende commando werkzaamheden aan lokale enige wat u hoeft te duwen na het verwijderen):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// deze back-up kunt u die commit (SHA1 ID van test dan het wijzigen 4 te plegen is 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // Het back-up je eerder een plegen.
  3. git reset --hard HEAD^ // Voor het verwijderen van de laatste commit uit git

na het verwijderen:

na het verwijderen te plegen

antwoordde op 03/07/2018 om 06:51
bron van user

stemmen
0

Reset op de lokale tak

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

Force push naar de oorsprong

git push -f origin
antwoordde op 29/05/2018 om 07:38
bron van user

stemmen
0

git terug https://git-scm.com/docs/git-revert Het zal alle code dan kunt u de volgende commit.Then hoofd zal wijzen op dat laatste commit doen terugkeren. bekeerd tot commits nooit te verwijderen, maar het zal niet van invloed op je laatste commit.

antwoordde op 01/03/2017 om 15:15
bron van user

stemmen
0

git reset --hard

git push origin HEAD --force

Indien één of meer van de commits is getagd, verwijdert u de tag (s) eerste. Anders gelabelde commit niet verwijderd.

antwoordde op 24/07/2015 om 14:45
bron van user

stemmen
0

Ervan uitgaande dat je niet hebben geduwd om de remote repository, kun je deze opnieuw klonen de repository. Dit is mijn methode van keuze een paar keer geweest.

antwoordde op 31/12/2014 om 06:54
bron van user

antwoordde op 18/07/2018 om 06:27
bron van user

stemmen
-1

Neem back-up van uw code in om tijdelijke map. Volgende commando wordt gereset hetzelfde als server.

git reset --hard HEAD
git clean -f
git pull

Kopieer vervolgens de benodigde bestanden alleen uit temp folder, dan plegen

antwoordde op 14/07/2016 om 11:25
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more