Kako promijeniti postojeće, neobuzdane obveze?

Napisao sam pogrešnu stvar u poruci urezivanja. Također, zaboravio sam uključiti neke datoteke.

Kako promijeniti poruku / datoteke urezati? Urezivanje još nije započelo.

7676
07 окт. postavio Laurie Young 07. listopada 2008-10-07 18:44 '08 u 18:44 2008-10-07 18:44
@ 27 odgovora

Promjena zadnje poruke urezivanja

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

... Međutim, to može otežati unos poruka s više redaka ili malih ispravaka.

Prije nego to učinite, provjerite da nemate nikakve izmjene u radnoj kopiji, inače će biti ispravljene. (Promjene nisu izvršene.)

Promjena poruke urezivanja koju ste već poslali udaljenoj grani

Ako ste već povjerili predavanje u udaljenu granu, onda morate prisilno gurati obvezu s:

SHA ID-ovima, što stvara problem ako druge osobe imaju kopije starih obveza koje ste ponovno napisali.  Svatko tko ima kopiju starog urezivanja morat će sinkronizirati svoj rad s novo prepisanim urezivanjem, što ponekad može biti teško, stoga se pobrinite da se koordinirate s drugima kada pokušavate ponovno napisati povijest uobičajenog urezivanja, ili jednostavno izbjeći prepisivanje ukupnih obveza. 


Koristite interaktivni rebaz

Druga mogućnost je korištenje interaktivne rebase.
To vam omogućuje uređivanje bilo koje poruke koju želite ažurirati, čak i ako to nije posljednja poruka.

Da biste napravili git squash, slijedite ove korake:

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

Čim zgazite svoje obveze, odaberite e/r da biste uredili poruku.

2019

07 окт. Odgovor je dat EfForEffort 07 okt. 2008-10-07 18:50 '08 u 18:50 2008-10-07 18:50
2438
08 февр. Odgovor je dan lfx_cool 08. veljače. 2010-02-08 07:26 '10 u 7:26 am 2010-02-08 07:26

Ako popravak koji želite popraviti nije posljednji:

  • git rebase --interactive $parent_of_flawed_commit

    Ako želite popraviti nekoliko pogrešnih urezivanja, proslijedite roditeljski kod najstarijeg.

  • Pojavljuje se uređivač s popisom svih objava nakon što ste ga dali.

    • Promijenite reword pick to reword (ili stare verzije Git-a, kako biste je edit ) prije popravaka koje želite popraviti.
    • Nakon spremanja, Git će ponoviti navedene unose.

  • Za svaku obvezu koju želite ponoviti, Git će vas odvesti natrag u vaš urednik. Za svaku obvezu koju želite promijeniti, Git vas stavlja u ljusku. Ako ste u ljusci:

    • Promijenite fiksaciju na bilo koji način.
    • git commit --amend
    • git rebase --continue

Veći dio ovog niza će vam objasniti rezultati različitih timova u pokretu. Njegova je vrlo jednostavna, ne morate je pamtiti - samo zapamtite da git rebase --interactive vam omogućuje da popravite, bez obzira koliko su dugo bili.


Imajte na umu da ne želite mijenjati obveze koje ste već pritisnuli. Ili možda hoćeš, ali u ovom slučaju morat ćeš vrlo pažljivo komunicirati sa svima koji su povukli tvoje obveze i obavili posao na njima. Kako vratiti / ponovno sinkronizirati nakon što netko povuče rebase ili ponovno postavi objavljenu nit?

2321
07 окт. odgovor je dao Aristotle Pagaltzis 7. listopada 2008-10-07 22:52 '08 u 22:52 2008-10-07 22:52

Da biste izvršili promjene u prethodnom urezivanju, izvršite potrebne promjene i izvršite te promjene, a zatim pokrenite

 git commit --amend -C HEAD 

Da biste popravili prethodnu predaju, potpuno je uklonite, pokrenite

 git rebase -i HEAD~ commit_count 

(Zamijenite commit_count brojem urezivanja koje želite promijeniti.) Ova naredba pokreće vaš urednik. Označite prvi retainer (onaj koji želite promijeniti) kao "edit" umjesto "select", zatim spremite i izađite iz urednika. Izvršite izmjene koje želite objaviti, a zatim pokrenite

758
16 авг. Odgovor daje Fatih 16 aug. 2011-08-16 00:20 '11 u 0:20 2011-08-16 00:20

Kao što je spomenuto, git commit --amend je način prebrisanja zadnjeg git commit --amend . Jedna napomena: ako želite i prebrisati datoteke , naredba će biti

390
07 июня '11 в 0:16 2011-06-07 00:16 odgovor je dao Ivan 07. '11 u 0:16 2011-06-07 00:16

Za to također možete koristiti git filter-branch .

351
01 сент. Odgovori Označi 01 ruj 2012-09-01 23:35 '12 u 23:35 2012-09-01 23:35

Radije bih ovako.

 git commit --amend -c <commit ID> 

U suprotnom, pojavit će se nova naredba s novim ID-om urezivanja.

312
10 янв. Odgovor dao krevedko 10. siječnja 2013-01-10 17:23 '13 u 17:23 2013-01-10 17:23

Ako koristite Git GUI alat, postoji gumb s imenom zadnja posljednja objava. Kliknite ovaj gumb, a zatim prikažite najnovije datoteke i poruku. Jednostavno uredite ovu poruku i možete je popraviti novom porukom urezivanja.

Ili upotrijebite ovu naredbu iz konzole / terminala:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. odgovor je dat Akhilraj NS 08 Nov. 2012-11-08 06:51 '12 u 6:51 am 2012-11-08 06:51

Možete koristiti git rebasing . Na primjer, ako želite vratiti natrag na urezivanje bbc643cd, pokrenite

 $ git rebase bbc643cd^ --interactive 

U zadanom uređivaču promijenite 'pick' u 'edit' u retku čije urezivanje želite promijeniti. Izvršite izmjene i izvršite ih pomoću

 $ git add <filepattern> 

Sada možete koristiti

 $ git commit --amend 

za promjenu urezivanja i nakon toga

 $ git rebase --continue 

za povratak na fiksiranje prethodnog poglavlja.

282
22 янв. odgovor daje Shoaib Ud-Din 22. siječnja 2013-01-22 20:23 '13 u 20:23 2013-01-22 20:23
  • Ako želite promijeniti posljednju poruku urezivanja, slijedite ove korake:

     git commit --amend 

    To će vas dovesti do vašeg uređivača teksta i omogućiti vam da promijenite posljednju poruku urezivanja.

  • Ako želite izmijeniti posljednje 3 poruke urezivanja ili bilo koje poruke u tom trenutku, stavite HEAD~3 na git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. Odgovor dao Heena Hussain 22. listopada 2012-10-22 14:22 '12 u 14:22 2012-10-22 14:22

Ako trebate promijeniti staru poruku urezivanja u nekoliko grana (tj., Poruka s porukom o pogrešci prisutna je u nekoliko grana), možete koristiti:

256
15 нояб. Odgovor su dali šerberi 15. studenoga. 2012-11-15 12:29 '12 u 12:29 2012-11-15 12:29

korištenje

 git commit --amend 

Da biste to razumjeli detaljno, izvrstan post je 4. Prepisati Git povijest . Također vam govori kada se ne koristi git commit --amend .

221
27 марта '13 в 23:43 2013-03-27 23:43 odgovor je dan skinuti 27. ožujka '13 u 23:43 2013-03-27 23:43

ispraviti

Imate nekoliko opcija. Možete to učiniti

 git commit --amend 

dok se ne izvrši posljednji put.

Interaktivno preusmjeravanje

U suprotnom, ako ovo nije vaša posljednja objava, možete izvesti interaktivni ponovno pokretanje,

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

Zatim unutar interaktivne preusmjeravanja jednostavno dodajete izmjenu ovoj urezivanju. Kada se to dogodi, učinite git commit --amend i promijenite poruku git commit --amend . Ako se želite vratiti na ovu točku fiksacije, također možete koristiti git reflog i jednostavno ukloniti taj popravak. Tada ponovno pokrenete git commit .

195
18 янв. Odgovor je dan wallerjake 18. siječnja 2013-01-18 04:45 '13 u 4:45 am 2013-01-18 04:45

Ako koristite Git GUI, možete promijeniti zadnje urezivanje koje nije kliknuto:

 Commit/Amend Last Commit 
183
01 дек. Odgovor daje gulchrider 01. prosinca. 2012-12-01 08:03 '12 u 8:03 2012-12-01 08:03

Ako je ovo vaša zadnja objava, samo popravite predaju:

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

(pomoću zastavice -o ( --only ) kako biste bili sigurni da mijenjate samo poruku --only )


Ako izgleda kao predavanje, upotrijebite zadivljujući interaktivni rebase :

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

Pronađite željenu obvezu, promijenite pick za r ( reword ) i spremite i zatvorite datoteku. Gotovo!



Minijaturni udžbenik vim (ili, kako ponovno instalirati samo 8 tipki 3j cw r Esc ZZ ):

  • Pokrenite vimtutor ako imate vremena.
  • h j k l odgovaraju navigacijskim tipkama ↑ ↑
  • Na primjer, sve naredbe mogu imati prefiks raspona. 3j pomiče na 3 retka
  • i , za ulazak u način umetanja - tekst koji unesete pojavit će se u datoteci
  • Esc ili Ctrl c za izlaz iz načina umetanja i povratak u normalan način rada.
  • u za poništavanje
  • Ctrl r za ponavljanje
  • dd , dw , dl za brisanje retka, riječi ili slova
  • cc , cw , cl za promjenu retka, riječi ili slova (isto kao i dd i )
  • yy , yw , yl kopirati ("yank") linije, riječi ili slova
  • p ili p za umetanje nakon ili prije trenutnog položaja
  • :w Unesite za spremanje (pisanje) datoteke
  • :q! Unesite izlaz bez spremanja
  • :wq Enter ili ZZ za spremanje i izlaz

Ako uređujete mnogo teksta, prebacite se na raspored Dvorakovih tipkovnica, naučite vrstu dodira i naučite vim. Je li vrijedno truda? Da.



ProTip ™: nemojte se bojati eksperimentirati s "opasnim" naredbama koje prepisuju povijest * - Git ne uklanja vaše popravke 90 dana po defaultu; Možete ih pronaći u reflogu:

 $ 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 

* Čuvajte se parametara kao što su - --hard i - --hard , iako oni mogu odbaciti podatke.
* Također nemojte ponovno pisati povijest u bilo kojoj grani s kojom surađujete.

170
10 февр. Odgovor je dat Zaz 10 Feb. 2015-02-10 03:01 '15 u 3:01 2015-02-10 03:01

Git GUI koristim koliko mogu, a to vam daje mogućnost da promijenite posljednju poruku:

2019

165
05 авг. odgovor koji je dao Havard Graff 05 aug. 2013-08-05 02:13 '13 u 2:13 2013-08-05 02:13

Wow, postoji mnogo načina da to učinite.

Drugi način da to učinite je da izbrišete posljednji unos, ali spremite njegove promjene tako da ne izgubite posao. Zatim možete izvršiti drugu obvezu s ispravljenom porukom. Izgledat će ovako:

03 дек. Odgovor daje Radu Murzea 03 dec. 2013-12-03 00:31 '13 u 0:31 2013-12-03 00:31

Ako želite promijeniti posljednju upotrebu urezivanja:

 git commit --amend 

ili

124
07 янв. odgovor dao Shubham Chaudhary 07. \ t 2014-01-07 01:03 '14 u 1:03 2014-01-07 01:03

Za one koji traže grafičko korisničko sučelje za Windows / Mac za pomoć u uređivanju starih poruka (tj. Ne samo najnovije poruke), preporučio bih SourceTree . U nastavku slijedite korake.

2019

123
06 нояб. Odgovor je dao Steve Chambers 6. studenog 2014-11-06 18:01 '14 u 18:01 2014-11-06 18:01

Ako želite promijeniti posljednju poruku, morate upotrijebiti --only flag ili njen -o prečac s commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 odgovorio je Davidu Ongarou 23. svibnja '14. u 11:40 sati 2014-05-23 11:40

Ažurirajte posljednju poruku o pogrešci novom porukom urezivanja u jednom retku:

 # 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. 

Koristite reset kako biste podijelili urezivanja u manje urezivanja.

git reset može vam pomoći da prekinete jednu obvezu u nekoliko urezivanja:

99
22 янв. odgovor je dan przbadu 22. siječnja 2014-01-22 11:57 '14 u 11:57 2014-01-22 11:57

Postoji mnogo odgovora na ovo pitanje, ali nijedno od njih ne objašnjava detaljno kako promijeniti stare poruke s VIM-om. Zaglavio sam pokušavajući to učiniti sam, pa ću vam ovdje detaljno reći kako sam to učinio posebno za ljude koji nemaju iskustva u VIM-u!

Htio sam promijeniti posljednjih pet obveza koje sam već kliknuo na poslužitelju. Prilično je "opasno" ako se netko iz njega izvukao, možete oštetiti stvari mijenjajući poruke urezivanja. Međutim, kada radite na svojoj maloj grani i sigurni ste da je nitko nije izvukao, možete je promijeniti na sljedeći način:

Pretpostavimo da želite promijeniti zadnjih pet urezivanja, a zatim ih unijeti u terminal:

git rebase -i HEAD~5 * Gdje je 5 broj urezanih poruka koje želite promijeniti. (ako želite promijeniti 10. do posljednjeg urezivanja, unesite 10)

Ova će vas naredba odvesti do VIM-a gdje možete urediti povijest izdavanja. Na vrhu ćete vidjeti posljednjih 5:

pick <commit hash> commit message

Umjesto pick morate napisati reword . To možete učiniti u VIM tako da upišete i , što vas prisiljava na ulazak u INSERT mod. (Možete vidjeti da ste u načinu umetanja s riječju INSERT u nastavku). Za urezivanje, želite promijeniti tip u reword umjesto pick

Zatim morate spremiti i izaći iz ovog zaslona, ​​a to ćete učiniti tako da najprije prebacite u naredbeni način pritiskom na tipku esc. (možete provjeriti da li se nalazite u naredbenom načinu ako riječ INSERT nestane ispod). Tada možete unijeti naredbu upisivanjem wq naredba spremanje i izlaz je wq . Stoga, ako upišete :wq youre ont, on će biti u pravu.

Tada će VIM ići na bilo koju poruku urezivanja koju želite ponovno napisati, ovdje zapravo možete promijeniti poruku urezivanja. To činite tako da odete u INSERT-mod, promijenite poruku urezivanja, pređete u komandni mod, spremite i zatvorite. Učinite to 5 puta, a vi ste izvan VIM-a!

Zatim, ako ste već gurnuli svoje pogrešne obveze, morate git push --force ih prepišete. Zapamtite da je git push --force prilično opasna stvar, pa se pobrinite da nitko nije izvučen iz poslužitelja, jer ste pritisnuli svoje pogrešne počinitelje!

Sada ste promijenili obvezu poruke!

(Kao što možete vidjeti, na VIM-u nisam toliko iskusan, pa ako sam pogrešno "s>

82
07 авг. odgovor je dan Marijn 07 aug. 2014-08-07 12:18 '14 u 12:18 2014-08-07 12:18

Možete koristiti git-rebase-reword

Osmišljen je za uređivanje bilo kojeg commit --amend (ne samo posljednjeg), baš kao i commit --amend

 $ git rebase-reword <commit-or-refname> 

Он назван в честь действия по интерактивной переадресации, чтобы исправить фиксацию: "изменить". См. этот пост и man -section interactive mode-

primjeri:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
ответ дан albfan 21 февр. '15 в 15:21 2015-02-21 15:21

Я добавил псевдоним reci , recm для recommit (amend) it, теперь я могу сделать это с помощью git recm или git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
ответ дан Chu-Siang Lai 06 янв. '14 в 10:24 2014-01-06 10:24