Vraag Hoe bestaande, niet-vastgezette commits te wijzigen?


Ik schreef het verkeerde in een commit-bericht. Als alternatief heb ik vergeten om sommige bestanden op te nemen.

Hoe kan ik de commit-berichten / bestanden wijzigen? De commit is nog niet gepusht.


7680
2017-10-07 15:44


oorsprong


antwoorden:


Het meest recente commit-bericht wijzigen

git commit --amend

zal je editor openen, waardoor je het commit bericht van de meest recente commit kunt veranderen. Bovendien kunt u het commit-bericht direct op de opdrachtregel instellen met:

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

... dit kan het maken van meerregelige commit-berichten of kleine correcties bemoeilijken.

Zorg dat u geen wijzigingen in de werkkopie hebt geënsceneerd Voordat ze dit doen, worden ze ook gecommitteerd. (unstaged veranderingen worden niet vastgelegd.)

Het bericht wijzigen van een commit die u al naar uw remote branch hebt gepusht

Als je je commit al naar je remote branch hebt geduwd, dan doe je dat nodig om de commit te forceren met:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Waarschuwing: force-pushing overschrijft de remote branch met de status van uw lokale branch. Als er commits op de remote branch zijn die je niet hebt in je lokale branch, jij zullen verlies die commits.

Waarschuwing: wees voorzichtig met het wijzigen van commits die u al met anderen hebt gedeeld. Amending committeert in wezen herschrijft ze hebben anders SHA ID's, die een probleem vormen als andere mensen kopieën hebben van de oude commit die je hebt herschreven. Iedereen die een kopie van de oude commit heeft, moet zijn werk synchroniseren met je nieuw herschreven commit, wat soms moeilijk kan zijn, dus zorg ervoor dat je met anderen coördineert wanneer je de gedeelde commit-geschiedenis herschrijft, of vermijd gewoon het herschrijven van gedeelde commits allemaal samen.


Gebruik interactieve rebase

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.

Voer de volgende stappen uit om een ​​git-squash te doen:

// 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 geplet hebt - kies de e/r voor het bewerken van het bericht

enter image description here

Belangrijke opmerking over interactieve rebase

Wanneer u de git rebase -i HEAD~X er kan zijn meer dan X begaat. Git "verzamelt" alle commits in de laatste X commits en als er ergens tussen dat bereik een fusie plaatsvindt, zie je alle commits ook, dus de uitkomst is X +.

Goed advies:

Als u het voor meer dan één branche moet doen en u kunt tegenstrijdigheden krijgen bij het aanpassen van de inhoud, stel deze dan in git rerere en laat Git deze conflicten automatisch voor je oplossen.


Documentatie


14790
2018-02-08 04:26



git commit --amend -m "your new message"

2414
2017-10-07 19:52



Als de commit die u wilt herstellen niet de meest recente is:

  1. git rebase --interactive $parent_of_flawed_commit

    Als je meerdere gebrekkige commits wilt corrigeren, geef je de ouder van de oudste een van hen door.

  2. Er verschijnt een editor met een lijst van alle commits sinds degene die je gaf.

    1. Verandering pick naar reword (of op oude versies van Git, to edit) voor alle commits die u wilt herstellen.
    2. Nadat je hebt opgeslagen, speelt Git de vermelde commits opnieuw af.
       

  3. Voor elke commit die u wilt met andere woorden uitdrukken, Git zal je terugbrengen naar je editor. Voor elke commit die u wilt Bewerk, Git laat je in de schaal vallen. Als je in de schaal zit:

    1. Verander de commit op elke gewenste manier.
    2. git commit --amend
    3. git rebase --continue

Het grootste deel van deze reeks zal u worden uitgelegd aan de hand van de uitvoer van de verschillende opdrachten terwijl u bezig bent. Het is heel gemakkelijk, je hoeft het niet te onthouden - onthoud dat gewoon git rebase --interactive laat je commits corrigeren, ongeacht hoe lang geleden ze waren.


Merk op dat je geen commits wilt veranderen die je al hebt gepusht. Of misschien wel, maar in dat geval zult u heel voorzichtig moeten zijn om met iedereen te communiceren die uw commits heeft getrokken en er bovenop heeft gewerkt. Hoe kan ik herstellen / opnieuw synchroniseren nadat iemand op een rebase heeft gedrukt of een reset naar een gepubliceerd filiaal heeft uitgevoerd?


2294
2017-08-15 21:20



Als u de vorige commit wilt wijzigen, brengt u de gewenste wijzigingen aan en voert u deze wijzigingen uit en voert u deze uit

git commit --amend

Hiermee wordt een bestand in uw teksteditor geopend dat uw nieuwe commit-bericht vertegenwoordigt. Het begint met de tekst van je oude commit-bericht. Wijzig het commit-bericht zoals je wilt, sla het bestand op en sluit je editor af om te voltooien.

Om de vorige commit te wijzigen en hetzelfde logbericht te behouden, voert u uit

git commit --amend -C HEAD

Om de vorige commit te repareren door deze volledig te verwijderen, voer

git reset --hard HEAD^

Als u meer dan één commit-bericht wilt bewerken, voert u uit

git rebase -i HEAD~commit_count

(Vervangen commit_count met het aantal commits dat u wilt bewerken.) Met deze opdracht wordt uw editor gestart. Markeer de eerste commit (die je wilt veranderen) als "edit" in plaats van "pick", sla dan op en sluit je editor af. Voer de wijziging uit die u wilt vastleggen en voer vervolgens uit

git commit --amend
git rebase --continue

Opmerking: u kunt "De gewenste wijziging aanbrengen" ook vanuit de editor geopend door git commit --amend


749
2018-06-06 21:16



Zoals al genoemd, git commit --amend is de manier om de laatste commit te overschrijven. Eén opmerking: als u dat ook wilt overschrijf de bestanden, zou het bevel zijn

git commit -a --amend -m "My new commit message"

381
2017-09-01 20:35



Je kunt ook git gebruiken filter-branch daarom.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Het is niet zo eenvoudig als een triviaal git commit --amend, maar het is vooral handig als je al enkele samenvoegingen hebt na je foutieve commit-bericht.

Merk op dat dit zal proberen om ELKE commit tussen te herschrijven HEAD en de gebrekkige commit, dus je zou jouw moeten kiezen msg-filter beveel zeer wijs ;-)


346
2018-01-10 14:23



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


306
2017-11-08 03:51