V správe o revízii som napísal nesprávnu vec.
Ako môžem správu zmeniť? Revízia ešte nebola odoslaná.
git commit --amend
otvorí váš editor, ktorý vám umožní zmeniť správu o odovzdaní poslednej revízie. Okrem toho môžete správu o odovzdaní nastaviť priamo v príkazovom riadku pomocou:
Jazyk: bash -->
git commit --amend -m "New commit message"
...to však môže spôsobiť, že zadávanie viacriadkových správ o odovzdaní alebo malých opráv bude ťažkopádnejšie.
Pred týmto postupom sa uistite, že nemáte žiadne zmeny pracovnej kópie staged, inak budú tiež odovzdané. (Zmeny nezastavené sa neodovzdajú.)
Ak'ste už posunuli svoju revíziu do vzdialenej vetvy, potom budete musieť vynútiť posunutie revízie pomocou:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Varning: force-pushing prepíše vzdialenú vetvu stavom vašej lokálnej vetvy. Ak sú vo vzdialenej vetve revízie, ktoré nemáte vo svojej lokálnej vetve, o tieto revízie prídete.
Upozornenie: buďte opatrní pri zmene revízií, ktoré ste už zdieľali s inými ľuďmi. Zmena revízií ich v podstate prepíše tak, aby mali iné SHA ID, čo predstavuje problém, ak majú iní ľudia kópie starých revízií, ktoré ste prepísali. Každý, kto má kópiu starej revízie, bude musieť synchronizovať svoju prácu s vašou novo prepísanou revíziou, čo môže byť niekedy ťažké, takže sa uistite, že pri pokuse o prepísanie zdieľanej histórie revízií sa koordinujete s ostatnými, alebo sa jednoducho vyhnite prepisovaniu zdieľaných revízií úplne.
Ďalšou možnosťou je použiť interaktívne rebase. To vám umožní upraviť akúkoľvek správu, ktorú chcete aktualizovať, aj keď to nie je najnovšia správa.
Ak chcete vykonať skvasenie Git, postupujte podľa týchto krokov:
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Po squashovaní revízií - vyberte e/r
pre úpravu správy:
Pri použití git rebase -i HEAD~X
môže byť viac ako X
revízií. Git "zhromaždí" všetky revízie v poslednom rozsahu X
revízií, a ak došlo k zlúčeniu niekde medzi týmto rozsahom, uvidíte aj všetky revízie, takže výsledok bude X+<počet revízií v zlúčení>.
Ak to musíte urobiť pre viac ako jednu vetvu a pri zmene obsahu by ste mohli naraziť na konflikty, nastavte git rerere
a nechajte systém Git, aby tieto konflikty vyriešil automaticky za vás.
Ak revízia, ktorú chcete opraviť, nie je najnovšia:
git rebase --interactive $parent_of_flawed_commit
Ak chcete opraviť niekoľko chybných revízií, odovzdajte rodiča najstaršej z nich.
Zobrazí sa editor so zoznamom všetkých revízií od tej, ktorú ste zadali.
pick
na reword
(alebo v starších verziách systému Git na edit
).Pre každú revíziu, ktorú chcete opraviť, vás Git pustí späť do editora. Pre každú revíziu, ktorú chcete editovať, vás Git hodí do shellu. Ak ste v shelli:
git commit --amend
git rebase --continue
Väčšinu z tejto postupnosti vám vysvetlí výstup jednotlivých príkazov, keď budete postupovať. Je to veľmi jednoduché, nemusíte si to pamätať - stačí si zapamätať, že git rebase --interactive
vám umožňuje opravovať revízie bez ohľadu na to, ako dávno boli vykonané.
Všimnite si, že nebudete chcieť meniť revízie, ktoré ste už odoslali. Alebo možno chcete, ale v tom prípade budete musieť veľmi starostlivo komunikovať s každým, kto možno stiahol vaše revízie a vykonal nad nimi prácu. Ako obnoviť/resynchronizovať po tom, čo niekto tlačí rebase alebo reset do publikovanej vetvy?