border=0

"77.95.5.4 - 77.95.5.4"

Hoe verander je bestaande, niet-geblokkeerde commits?

Ik schreef het verkeerde in het commit-bericht. Ook ben ik vergeten sommige bestanden op te nemen.

Hoe de commit voor berichten / bestanden wijzigen? De commit is nog niet begonnen.

7676
07 окт. ingesteld door Laurie Young 07 okt 2008-10-07 18:44 '08 om 18:44 2008-10-07 18:44
@ 27 antwoorden

Wijzigingen in het meest recente commit-bericht

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

... Dit kan het maken van multi-line commit-berichten of kleine correcties echter tijdrovender maken.

Voordat u dit doet, moet u ervoor zorgen dat u geen wijzigingen in de werkkopie hebt, anders worden deze verholpen. (Niet gemaakte wijzigingen worden niet verholpen.)

Het commit-bericht wijzigen dat al naar het externe filiaal is verzonden

Als je je commit al naar een remote branch hebt geduwd, dan moet je de commit met geweld pushen met:

SHA ID's, wat een probleem creëert als andere mensen kopieën hebben van oude commits die je hebt herschreven.  Iedereen die een kopie van de oude commit heeft, moet zijn werk synchroniseren met de nieuw herschreven commit, wat soms moeilijk kan zijn, dus zorg ervoor dat je met anderen coördineert wanneer je de geschiedenis van een gemeenschappelijke commit probeert te herschrijven, of vermijd gewoon het herschrijven van totale commits in het algemeen. 


Gebruik interactieve rebaz

Een andere optie is om interactieve rebase te gebruiken.
Hiermee kunt u elk bericht bewerken dat u wilt bijwerken, zelfs als dit niet het laatste bericht is.

Ga als volgt te werk om git squash te maken:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Zodra je je commits verplettert, selecteer je e/r om het bericht te bewerken.

2019

07 окт. Het antwoord wordt gegeven door EfForEffort 07 okt. 2008-10-07 18:50 '08 om 18:50 2008-10-07 18:50
2438
08 февр. Het antwoord is gegeven lfx_cool 08 feb. 2010-02-08 07:26 '10 om 07:26 uur 2010-02-08 07:26 uur

Als de fix die u wilt repareren niet de laatste is:

  • git rebase --interactive $parent_of_flawed_commit

    Als je een paar foutieve commits wilt herstellen, geef dan de oudercode door van de oudste.

  • Er verschijnt een editor met een lijst met alle commits sinds je deze hebt gegeven.

    • Wijzig pick om opnieuw te reword (of oude versies van Git, om te edit ) vóór eventuele fixes die u wilt herstellen.
    • Na het opslaan, speelt Git de genoemde commits.

  • Voor elke commit die je opnieuw wilt doen, neemt Git je mee terug naar je editor. Voor elke commit die je wilt veranderen, plaatst Git je in een shell. Als je in een shell zit:

    • Verander de fixatie op welke manier dan ook.
    • git commit --amend
    • git rebase --continue

Het grootste deel van deze reeks wordt uitgelegd aan de hand van de uitvoer van verschillende teams >git rebase --interactive toestaat om het te repareren, ongeacht hoe >


Houd er rekening mee dat u de commit die u al hebt ingedrukt niet wilt wijzigen. Of misschien wel, maar in dit geval zult u heel voorzichtig moeten zijn om te communiceren met iedereen die mogelijk uw commits heeft getrokken en er bovenop heeft gewerkt. Hoe te herstellen / opnieuw synchroniseren nadat iemand een rebase heeft gesleept of is teruggezet in een gepubliceerde thread?

2321
07 окт. het antwoord is gegeven Aristotle Pagaltzis 07 oct. 2008-10-07 22:52 '08 om 10:52 uur 2008-10-07 22:52

Als u wijzigingen in een vorige commit wilt aanbrengen, brengt u de nodige wijzigingen aan en brengt u deze wijzigingen aan. Vervolgens voert u de wijzigingen uit

 git commit --amend -C HEAD 

Om de vorige commit te repareren, volledig verwijderen, uitvoeren

 git rebase -i HEAD~ commit_count 

(Vervang commit_count door het aantal commits dat je wilt veranderen.) Met deze opdracht start je je editor. Markeer de eerste houder (degene die u wilt wijzigen) als "bewerken" in plaats van "selecteren", sla vervolgens op en sluit de editor. Breng de wijzigingen aan die u wilt vastleggen en voer vervolgens uit

758
16 авг. Het antwoord wordt gegeven door Fatih 16 aug. 2011-08-16 00:20 '11 om 0:20 2011-08-16 00:20

Zoals gezegd is git commit --amend een manier om de laatste commit te overschrijven. Eén opmerking: als u ook bestanden wilt overschrijven , is de opdracht

390
07 июня '11 в 0:16 2011-06-07 00:16 het antwoord wordt gegeven door John op 07 juni '11 om 0:16 de 2011-06-07 00:16

Je kunt hiervoor ook git filter-branch .

351
01 сент. Antwoord Mark 01 Sep 2012-09-01 23:35 '12 om 23:35 uur 2012-09-01 23:35 uur

Ik geef de voorkeur aan deze manier.

 git commit --amend -c <commit ID> 

Anders zal er een nieuwe commit zijn met een nieuwe commit-ID.

312
10 янв. Antwoord gegeven door krevedko 10 jan 2013-01-10 17:23 '13 om 17:23 2013-01-10 17:23

Als u de Git GUI-tool gebruikt, is er een knop met de naam laatste last commit. Klik op deze knop en geef uw laatste commit-bestanden en bericht weer. Bewerk dit bericht en u kunt het herstellen met een nieuw commit-bericht.

Of gebruik deze opdracht vanaf de console / terminal:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. het antwoord is gegeven Akhilraj NS 08 nov. 2012-11-08 06:51 '12 om 06:51 uur 2012-11-08 06:51

Je kunt git rebasing gebruiken . Als u bijvoorbeeld wilt terugkeren naar commit bbc643cd, voert u uit

 $ git rebase bbc643cd^ --interactive 

Wijzig in de standaardeditor 'kiezen' in 'bewerken' in de regel waarvan u de commit wilt wijzigen. Breng wijzigingen aan en voer ze vervolgens uit

 $ git add <filepattern> 

Nu kunt u gebruiken

 $ git commit --amend 

om de fixatie te veranderen en daarna

 $ git rebase --continue 

om terug te keren naar de vorige hoofdstuk fixatie.

282
22 янв. het antwoord wordt gegeven door Shoaib Ud-Din 22 januari. 2013-01-22 20:23 '13 om 20:23 2013-01-22 20:23
  • Volg deze stappen als u het laatste commit-bericht wilt wijzigen:

     git commit --amend 

    Hiermee ga je naar je teksteditor en kun je het laatste bericht van de commit wijzigen.

  • Als je de laatste 3 commit-berichten of commit-berichten op dit punt wilt wijzigen, plaats je HEAD~3 in de opdracht git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. antwoord gegeven door Heena Hussain 22 okt 2012-10-22 14:22 '12 om 14:22 uur 2012-10-22 14:22

Als u het oude commit-bericht in verschillende branches moet veranderen (d.w.z. een bericht met een foutmelding in verschillende branches), kunt u het volgende gebruiken:

15 нояб. Het antwoord wordt gegeven door sebers 15 november. 2012-11-15 12:29 '12 om 12:29 uur 2012-11-15 12:29 uur

gebruik van

 git commit --amend 

Om dit in detail te begrijpen, is een uitstekende post 4. Herschrijf de geschiedenis van Git . Het vertelt ook wanneer je git commit --amend niet moet gebruiken .

221
27 марта '13 в 23:43 2013-03-27 23:43 het antwoord wordt op 27 maart '13 om 23:43 gegeven. 2013-03-27 23:43

amenderen

Je hebt een aantal opties. Je kunt doen

 git commit --amend 

totdat deze als laatste is uitgevoerd.

Interactieve omleiding

Anders, als dit niet je laatste commit is, kun je een interactieve reboot uitvoeren,

 git rebase -i [branched_from] [hash before commit] 

In de interactieve omleiding voegt u eenvoudig een bewerking toe aan deze commit. Wanneer dit gebeurt, doe git commit --amend wijzig en verander het commit bericht. Als je terug wilt naar dit punt van fixatie, kun je ook git reflog en eenvoudig deze fix verwijderen. Vervolgens voer je git commit opnieuw uit.

195
18 янв. Het antwoord wordt wallerjake gegeven op 18 januari 2013-01-18 04:45 '13 om 4:45 uur 2013-01-18 04:45

Als u de GUI Git gebruikt, kunt u de laatste commit wijzigen waarop niet is geklikt:

 Commit/Amend Last Commit 
183
01 дек. Het antwoord wordt gegeven door gulchrider 01 dec. 2012-12-01 08:03 '12 om 8:03 2012-12-01 08:03

Als dit je laatste commit is, repareer dan gewoon de commit:

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

(met de vlag -o ( --only ) om te zorgen dat u alleen het commit-bericht wijzigt)


Als het lijkt op een commit, gebruik dan een geweldige interactieve rebase :

 git rebase -i @~9 # Show the last 9 commits in a text editor 

Zoek de gewenste commit, verander pick naar r ( reword ) en sla het bestand op en sluit het. Klaar!



Miniature tutorial vim (of, hoe 3j toetsaanslagen opnieuw te installeren 3j cw r Esc ZZ ):

  • Voer de vimtutor als je tijd hebt.
  • h j k l overeen met de bewegingstoetsen
  • Alle opdrachten kunnen bijvoorbeeld een bereikprefix hebben. 3j gaat naar 3 lijnen
  • i , om de invoegmodus in te gaan - de tekst die u invoert, verschijnt in het bestand
  • Esc of Ctrl c om de invoegmodus te verlaten en terug te keren naar de normale modus.
  • u om te annuleren
  • Ctrl r om te herhalen
  • dd , dw , dl om respectievelijk een regel, een woord of een letter te verwijderen
  • cc , cw , cl om respectievelijk een regel, een woord of een letter te veranderen (hetzelfde als dd i )
  • yy , yw , yl om regels, woorden of letters te kopiëren ("yank")
  • p of p om respectievelijk na of vóór de huidige positie in te voegen
  • :w Enter om bestand op te slaan (schrijven)
  • :q! Ga naar exit zonder op te slaan
  • :wq Enter of ZZ om op te slaan en af ​​te sluiten

Als u veel tekst bewerkt, schakelt u over naar de Dvorak-toetsenbordindeling, leert u het aanraaktype en leert u vim. Is het de moeite waard? Ja.



ProTip ™: wees niet bang om te experimenteren met "gevaarlijke" opdrachten die de geschiedenis herschrijven * - Git verwijdert uw verplichtingen niet standaard gedurende 90 dagen; Je kunt ze vinden in de reflog:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* Pas op voor parameters zoals --hard en --force , hoewel ze mogelijk gegevens verwijderen.
* Herschrijf ook de geschiedenis niet in branches waarmee je samenwerkt.

170
10 февр. Het antwoord is gegeven Zaz 10 feb. 2015-02-10 03:01 '15 om 3:01 2015-02-10 03:01

Ik gebruik Git GUI zo veel als ik kan, en het geeft je de mogelijkheid om het laatste bericht te wijzigen:

2019

165
05 авг. het antwoord wordt gegeven door Havard Graff 05 aug. 2013-08-05 02:13 '13 om 2:13 2013-08-05 02:13

Wauw, er zijn dus veel manieren om dit te doen.

Een andere manier om dit te doen, is om de laatste commit te verwijderen, maar de wijzigingen op te slaan, zodat u uw werk niet verliest. U kunt vervolgens nog een commit uitvoeren met een gecorrigeerd bericht. Het ziet er ongeveer zo uit:

135
03 дек. Het antwoord wordt gegeven door Radu Murzea 03 dec. 2013-12-03 00:31 '13 om 0:31 2013-12-03 00:31

Als u het laatste gebruik van commit wilt wijzigen:

 git commit --amend 

of

124
07 янв. antwoord gegeven door Shubham Chaudhary 07 jan 2014-01-07 01:03 '14 om 1:03 2014-01-07 01:03

Voor degenen die op zoek zijn naar een grafische gebruikersinterface voor Windows / Mac om te helpen bij het bewerken van oude berichten (d.w.z. niet alleen het meest recente bericht), zou ik SourceTree aanbevelen. Stappen om hieronder te volgen.

2019

123
06 нояб. Antwoord wordt gegeven door Steve Chambers 06 november 2014-11-06 18:01 '14 om 18:01 2014-11-06 18:01

Als u het laatste bericht wilt wijzigen, moet u de --only vlag of de -o snelkoppeling gebruiken met commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 antwoordde David Ongaro op 23 mei '14 om 11:40 uur 2014-05-23 11:40 uur

Werk het laatste foutbericht bij met een nieuw commit-bericht op één regel:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Gebruik reset om commits in kleinere commits te splitsen.

git reset kan je helpen om een ​​commit te verbreken in verschillende commits:

99
22 янв. het antwoord is gegeven 22 januari 22 2014-01-22 11:57 '14 om 11:57 2014-01-22 11:57

Er zijn veel antwoorden in deze vraag, maar geen van deze legt in detail uit hoe oude bevestigingsberichten met VIM kunnen worden veranderd. Ik zit vast en probeer het zelf te doen, dus hier zal ik je in detail vertellen hoe ik het heb gedaan, vooral voor mensen die geen ervaring hebben met VIM!

Ik wilde mijn laatste vijf commits wijzigen die ik al op de server heb geklikt. Het is behoorlijk "gevaarlijk" als iemand anders het uittrekt, je kunt dingen beschadigen door de commit-berichten te veranderen. Wanneer u echter aan uw kleine tak werkt en er zeker van bent dat niemand eraan heeft getrokken, kunt u dit als volgt wijzigen:

Stel dat u uw laatste vijf commits wilt wijzigen, voer dit dan in de terminal in:

git rebase -i HEAD~5 * Waar 5 het aantal commit-berichten is dat je wilt veranderen. (dus als je de 10e tot de laatste commit wilt veranderen, voer dan 10 in)

Deze opdracht leidt je naar VIM waar je je commit-geschiedenis kunt bewerken. Je zult de laatste 5 commits zien bovenaan:

pick <commit hash> commit message

In plaats van pick , moet je een nieuwe reword schrijven. Je kunt dit in VIM doen door i typen, wat je dwingt om INSERT-mode in te gaan. (U kunt zien dat u in invoegmodus bent met het woord INSERT hieronder). Voor commits, wil je het type in reword veranderen in plaats van pick

Vervolgens moet u dit scherm opslaan en afsluiten. Dit doet u door eerst naar de opdrachtmodus te gaan door op de esc-knop te drukken. (u kunt controleren of u zich in de commandomodus bevindt als het woord INSERT hieronder verdwijnt). Vervolgens kunt u een opdracht invoeren door te typen wq opdracht opslaan en afsluiten is wq . Daarom, als u typt :wq youre ont, heeft hij gelijk.

Dan gaat VIM naar elk commit-bericht dat je wilt herschrijven, hier kun je eigenlijk het commit-bericht veranderen. Dit doe je door in de INSERT-modus te gaan, het commit-bericht te wijzigen, de commandomodus in te gaan en op te slaan en te sluiten. Doe het 5 keer, en je hebt geen VIM meer!

Als je dan al je verkeerde commits hebt geduwd, dan heb je git push --force ze git push --force overschrijven. Помните, что git push --force - довольно опасная вещь, поэтому убедитесь, что no- один вытащил с сервера, так как вы нажали свои неправильные коммиты!