Skvošas mano paskutinis X įsipareigoja kartu naudodamas git

Kaip aš galiu raižyti savo paskutinį X, kartu įsipareigojant, naudojant Git?

2490
04 марта '11 в 7:11 2011-03-04 07:11 Markdorison yra nustatytas kovo 04 '11, 07:11 2011-03-04 07:11
@ 30 atsakymų

Naudokite git rebase -i <after-this-commit> ir pakeiskite rinkinį antra ir vėlesniais skvošais arba fiksavimo priemonėmis, kaip aprašyta pamokoje .

Šiame pavyzdyje <a ht-thisitit> yra arba SHA1 hash arba santykinė vieta nuo dabartinės šakos HEAD, iš kurios analizuojama peradresavimo komandos įsipareigojimas. Pavyzdžiui, jei vartotojas nori matyti, kad praeityje 5 dabartiniai HEAD įsipareigoja, komanda git rebase -i HEAD~5 .

1371
04 марта '11 в 7:18 2011-03-04 07:18 Anomie atsakymą pateikė kovo 4 d. 11 d. 7:18 2011-03-04 07:18

Tai galite padaryti gana lengvai be git rebase arba git merge --squash . Šiame pavyzdyje mes išskleisime paskutinius 3 įvykius.

Jei norite parašyti naują įsipareigojimų pranešimą iš naujo, pakanka:

 git reset --soft HEAD~3  git commit 
border=0

Jei norite pradėti redaguoti naują įsipareigojimų pranešimą su esamų įsipareigojimų pranešimų susiejimu (pvz., Atrodo, kad jis prasidės su skvošas / skvošas / skvošas /.../ skvošas git rebase -i ), tada jums reikės ištraukti šiuos pranešimus ir išsiųskite juos git commit :

 git reset --soft HEAD~3  git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})" 

Abu šie metodai suskirsto į tris naujus įsipareigojimus tokiu pačiu būdu. Minkštas atstatymas paprasčiausiai perkelia HEAD į paskutinį pataisymą, kurio nenorite susmulkinti. Nei indeksas, nei darbinis medis nesuderina su minkštu atstatymu, paliekant indeksą norimoje būsenoje jūsų naujam įvykiui (t. Y. Jis jau turi visus pakeitimus, susijusius su įsipareigojimais, kuriuos ketinate „išmesti“).

2733
05 марта '11 в 7:19 2011-03-05 07:19 Chris Johnsen atsakymas kovo 05 '11, 07:19 2011-03-05 07:19

git merge --squash galite naudoti „ git merge --squash - tai yra šiek tiek elegantiškesnė nei „ git rebase -i . Tarkime, kad esate priimančiojoje vietoje ir norite išpumpuoti paskutinius 12 įsipareigoja vienam.

ĮSPĖJIMAS. Pirmiausia įsitikinkite, kad patikrinate git reset --hard kad git status švari (nes git reset --hard bus atmesti žingsnį ir nenurodytus pakeitimus)

Tada:

 # Reset the current branch to the commit just before the last 12: git reset --hard HEAD~12 # HEAD@{1} is where the branch was just before the previous command. # This command sets the state of the index to be as it would just # after a merge from that commit: git merge --squash HEAD@{1} # Commit those squashed changes. The commit message will be helpfully # prepopulated with the commit messages of all the squashed commits: git commit 

--squash git merge dokumentai išsamiau --squash parametrą „ --squash .


Atnaujinimas: vienintelis realus šio metodo pranašumas, palyginti su paprastesniu git reset --soft HEAD~12 git commit kurį Chris Johnsen pasiūlė savo atsakyme, yra tas, kad gausite įsipareigojimo pranešimą, užpildytą kiekvienu jums priskirtu pranešimu susmulkinti

597
04 марта '11 в 9:10 2011-03-04 09:10 atsakymą pateikė Markas Longairas kovo 4 d. 11 val. 9:10 2011-03-04 09:10

Rekomenduoju vengti git reset kai tik įmanoma, ypač naujesnei „Git“. Jei tikrai nereikia automatizuoti proceso, remiantis daugeliu įsipareigojimų, yra mažiau egzotiškas būdas ...

  • Įdėkite kompromisą dėl darbo šakos (jei jie dar neįdiegti) - naudokite gitk
  • Patikrinkite taikinį (pvz., „Šeimininkas“)
  • git merge --squash (working branch name)
  • git commit

Užduoties pranešimas bus užpildytas skvošas.

147
15 марта '14 в 2:24 2014-03-15 02:24 Atsakymas suteiktas nobar kovo 15, 14, 14:24 2014-03-15 02:24

Remiantis Chris Jonsen atsakymu ,

Pridėkite pasaulinį skvošo pseudonimą iš bash: (arba „Git Bash“ sistemoje „Windows“)

 git config --global alias.squash '!f(){ git reset --soft HEAD~${1}  git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"; };f' 

... arba naudojant „Windows“ komandinę eilutę:

 git config --global alias.squash "!f(){ git reset --soft HEAD~${1}  git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f" 


Dabar jūsų ~/.gitconfig turėtų būti šis slapyvardis:

 [alias] squash = "!f(){ git reset --soft HEAD~${1}  git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f" 


Naudoti:

 git squash N 

... kuris automatiškai ateina kartu, paskutinis N įsipareigoja, įskaitant.

Pastaba Gautas įsipareigojimo pranešimas yra visų susmulkintų užsakymų derinys. Jei esate nepatenkintas, visada galite git commit --amend pakeisti jį rankiniu būdu. (Arba redaguokite slapyvardį, kad atitiktų jūsų skonį.)

102
19 февр. EthanB atsakymas yra vasario 19 d 2014-02-19 22:21 '14, 22:21 pm 2014-02-19 22:21

Dėl šio patogaus tinklaraščio įrašo pastebėjau, kad galite naudoti šią komandą, kad galėtumėte platinti paskutinius tris įsipareigojimus:

 git rebase -i HEAD~3 

Tai patogu, nes ji veikia net jei esate vietiniame filiale be stebėjimo / nuotolinio atpirkimo informacijos.

Komanda atidarys interaktyvų nukreipimo redaktorių, kuris leidžia jums keisti užsakymą, skvošą, žodį ir kt. Pagal įprastą.


Interaktyvaus peradresavimo redaktoriaus naudojimas:

Paskutiniai trys įvykiai rodomi interaktyvaus biuletenio redaktoriuje. Šį apribojimą nustatė HEAD~3 kai vykdoma komanda git rebase -i HEAD~3 .

Paskutinis įvykis, HEAD , pirmą kartą rodomas eilutėje 1. Linijos, prasidedančios # yra komentarai / dokumentai.

Rodomi dokumentai yra gana aiškūs. Bet kurioje eilutėje galite pakeisti komandą iš pick komandos į pasirinktą komandą.

Norėčiau naudoti „ fixup komandą, nes tai „išspaudžia“ fixup , esantį pirmiau esančioje eilutėje, ir atmeta fixup pranešimą.

Kadangi fiksavimas 1 eilutėje yra HEAD , daugeliu atvejų jį paliksite kaip pick . Jūs negalite naudoti squash ar fixup nes nėra jokio kito pataisymo, kad fixup pataisą.

2019

17 мая '16 в 9:19 2016-05-17 09:19 atsakymą pateikė br3nt gegužės 17 d., 16 val. 9:19 2016-05-17 09:19

Jei naudojate „TortoiseGit“, galite naudoti „ Combine to one commit funkciją:

  • Atidarykite TortoiseGit kontekstinį meniu
  • Pasirinkite Show Log
  • Žymėti atitinkamą įrašo žurnalo vaizdą.
  • Pasirinkite Combine to one commit iš kontekstinio meniu.

2019

06 нояб. Atsakymą pateikė Matthias M. 2015-11-06 15:51 '15 15:51 2015-11-06 15:51

Remdamasis šiuo straipsniu , aš naudoju šį metodą lengviau.

Mano „dev“ filialas viršijo „kilmės / dev“ 96 įsipareigojimus (todėl šie įsipareigojimai dar nebuvo stumiami į nuotolinį kompiuterį).

Aš norėjau išeiti per šiuos įvykius, prieš priverčiant pakeitimus. Norėčiau atšaukti filialą į būseną „kilmė / dev“ (tai paliks visus pakeitimus iš 96 neįvykdytų) ir paskui atliks pakeitimus iš karto:

 git reset origin/dev git add --all git commit -m 'my commit message' 
34
22 мая '14 в 3:41 2014-05-22 03:41 atsakymą trudolfas pateikė gegužės 22 d. 14 d. 3:41 2014-05-22 03:41

1) Nustatykite trumpą maišos kodą

 # git log --pretty=oneline --abbrev-commit abcd1234 Update to Fix for issue B cdababcd Fix issue B deab3412 Fix issue A .... 

Čia netgi git log --oneline taip pat gali būti naudojamas trumpam git log --oneline gauti.

2) Jei norite išstumti (sujungti) paskutines dvi fiksacijas

 # git rebase -i deab3412 

3) Tai atveria nano redaktorių sujungti. Ir atrodo taip

 .... pick cdababcd Fix issue B pick abcd1234 Update to Fix for issue B .... 

4) Pervardykite žodį pick to squash kuris yra prieš abcd1234 . Po pervadinimo jis turėtų atrodyti taip.

 .... pick cdababcd Fix issue B squash abcd1234 Update to Fix for issue B .... 

5) Dabar išsaugokite ir uždarykite nano redaktorių. Paspauskite ctrl + o ir paspauskite Enter kad išsaugotumėte. Tada paspauskite ctrl + x kad išeitumėte iš redaktoriaus.

6) Tada nano redaktorius vėl atsidaro, kad galėtumėte atnaujinti komentarus, prireikus jį atnaujinti.

7) Dabar jos suspaudimas yra sėkmingas, galite jį patikrinti patikrindami žurnalus.

 # git log --pretty=oneline --abbrev-commit 1122abcd Fix issue B deab3412 Fix issue A .... 

8) Dabar spustelėkite repo. Pastaba pridėti + ženklą prieš šakos pavadinimą. Tai reiškia priverstinį stumimą.

 # git push origin +master 

Pastaba Tai pagrįsta git naudojimu ubuntu apvalkalu. Jei naudojate skirtingus „ Windows („ Windows arba „ Mac ), tuomet minėtos komandos yra tos pačios, išskyrus redaktorių. Galite gauti kitą redaktorių.

28
10 янв. Atsakymas pateikiamas rashok Jan 10 2018-01-10 17:19 '18, 18:19 PM 2018-01-10 17:19

Norėdami tai padaryti, galite naudoti šią git komandą.

  git rebase -i HEAD~n 

n (= 4 čia) yra paskutinio įvykio numeris. Tada turite šias parinktis:

 pick 01d1124 Message.... pick 6340aaa Message.... pick ebfd367 Message.... pick 30e0ccb Message.... 

Atnaujinkite, kaip parodyta žemiau.

 p 01d1124 Message.... s 6340aaa Message.... s ebfd367 Message.... s 30e0ccb Message.... 

Išsamesnės informacijos žr. Nuoroda

Sėkmės!

27
06 апр. Atsakymas, kurį pateikė Jakir Hosen Khan 06 Bal. 2017-04-06 08:26 '17 at 8:26 2017-04-06 08:26

Atsakymas į anomiją yra geras, bet aš jaustis nesaugus, todėl nusprendžiau pridėti keletą nuotraukų.

0 žingsnis: git žurnalas

Pažiūrėkite, kur esate su git log . Svarbiausia yra surasti pirmojo įsipareigojimo, kurio nenorite skvošas, nustatymo maišą. Taigi, tik:

2019

26 июня '18 в 21:03 2018-06-26 21:03 Atsakymą pateikė Martin Thoma , birželio 26 d., 18 val. 21:03 2018-06-26 21:03

Jei esate nuotolinio filialo (vadinamo feature-branch ), kuris yra klonuotas iš aukso saugyklos („ golden_repo_name ), tuomet čia yra technologija, skirta jūsų golden_repo_name :

  • Padarykite auksinę repo

     git checkout golden_repo_name 
  • Iš jos sukurkite naują filialą (aukso repo) taip

     git checkout -b dev-branch 
  • Sujunkite skvošą su savo vietiniu filialu

     git merge --squash feature-branch 
  • Padarykite savo pakeitimus (tai bus vienintelis įsipareigojimas, kuris patenka į dev filialą)

     git commit -m "My feature complete" 
  • Spustelėkite filialą vietinėje saugykloje

     git push origin dev-branch 
20
09 сент. Atsakymą pateikė Sandesh Kumar 09 rugsėjis 2015-09-09 18:58 '15 at 18:58 2015-09-09 18:58

Tai yra super duper kludgy, bet šiek tiek vėsioje aplinkoje, todėl aš tiesiog mesti jį į žiedą:

 GIT_EDITOR='f() { if [ "$(basename $1)" = "git-rebase-todo" ]; then sed -i "2,\$s/pick/squash/" $1; else vim $1; fi }; f' git rebase -i foo~5 foo 

Vertimas: pateikite naują „redaktorių“ gitui, kuris, jei redaguotas „ git-rebase-todo failo pavadinimas (kvietimas interaktyviam peradresavimui), viskas keičiasi, bet pirmasis „pasirinkite“ į „skvošas“ ir kitaip generuoja vim - taip kad, kai būsite paraginti pakeisti suspausto įsipareigojimo pranešimą, gausite vim. (Ir, žinoma, aš sutraiškiau paskutinius penkis įsipareigojimus foo filiale, bet jūs galite tai pakeisti taip, kaip norite.)

Tikriausiai darytumėte tai, ką pasiūlė Markas Longheras .

14
04 марта '11 в 19:12 2011-03-04 19:12 atsakymą pateikė „ Cascabel “ kovo 4 d. 11 d. 19:12 2011-03-04 19:12

Jei norite užfiksuoti kiekvieną įrašą vienoje įvykio vietoje (pvz., Pirmą kartą išleidžiant projektą pirmą kartą), pabandykite:

 git checkout --orphan <new-branch> git commit 
11
20 авг. atsakymas, kurį pateikė William Denniss 2016-08-20 23:39 '16 at 11:39 2016-08-20 23:39

Kas gali būti tikrai patogu: suraskite maišymo pataisą, kurią norite peržiūrėti iš viršaus; tarkime, kad dabar naudokite d43e15

git reset d43e15

git commit -am 'new commit name'

8
14 сент. Atsakymą pateikė Ariel Gabizon 14 sep. 2017-09-14 13:33 '17, 13:33 pm 2017-09-14 13:33

Manau, kad paprasčiausias būdas tai padaryti yra sukurti naują filialą iš vedlio ir sujungti funkcijų „squash“ šakas.

 git checkout master git checkout -b feature_branch_squashed git merge --squash feature_branch 

Tada turite visus pakeitimus, kuriuos galite padaryti.

7
20 марта '18 в 18:28 2018-03-20 18:28 atsakymą pateikė vartotojo1376350 kovo 20 d. 18:28 2018-03-20 18:28

Į filialą, kurį norite sujungti, vykdykite:

 git rebase -i HEAD~(n number of commits back to review) 

Tai atvers teksto redaktorių, o prieš pasirinkdami „skvošas“, turite pasirinkti „pasiimti“, jei norite, kad šie įsipareigojimai būtų sujungti. Pavyzdžiui, jei norite sujungti visus įsipareigojimus į vienetą, „select“ yra pirmasis įvykdytas įsipareigojimas, o visi būsimi (pateikti po pirmuoju) turėtų būti „squash“. Jei naudojate vim, naudokite : x įterpimo režimu, kad išsaugotumėte ir išeitumėte iš redaktoriaus.

Tada užbaigite atnaujinimą:

 git rebase --continue 

Norėdami gauti daugiau informacijos apie šį ir kitus būdus, kaip perrašyti įsipareigojimo istoriją, žr. Šį naudingą pranešimą.

5
11 июля '18 в 1:28 2018-07-11 01:28 atsakymą pateikė aabiro liepos 11 d. 18 val. 1:28 2018-07-11 01:28
 git rebase -i HEAD^^ 

kur skaičius ^ lygus X

(šiuo atveju užfiksuokite dvi paskutines fiksacijas)

3
19 февр. Atsakymą pateikė „ Yoaz Menda “ vasario 19 d. 2018-02-19 15:32 '18, 15:32 pm 2018-02-19 15:32

Manau, kad bendresnis sprendimas nėra nurodyti „N“, o filialo / įsipareigojimo identifikatorius, kurį norite pereiti. Tai yra mažesnė klaidų tikimybė nei suskaičiuojant tam tikrą nustatymą - tiesiog nukreipkite žymę tiesiogiai arba jei tikrai norite suskaičiuoti, galite nurodyti HEAD ~ N.

Mano darbo eigoje pradedu filialą, o mano pirmasis įsipareigojimas šioje temoje apibendrina tikslą (tai paprastai, ką spaudžiu kaip „galutinį“ pranešimą šiai funkcijai viešojoje saugykloje.) Todėl, kai aš Aš noriu padaryti šį git squash master atgal į pirmąjį pranešimą, ir tada aš pasiruošęs spustelėti.

Naudoju pseudonimą:

 squash = !EDITOR="\"_() { sed -n 's/^pick //p' \"\\$1\"; sed -i .tmp '2,\\$s/^pick/f/' \"\\$1\"; }; _\"" git rebase -i 

Dėl šios priežasties istorija bus suspausta prieš tai - ji suteikia galimybę susigrąžinti, jei norite sugrąžinti senąjį fiksavimo ID iš konsolės. („Solaris“ naudotojai pažymi, kad jie naudoja „GNU sed -i parinktį, „Mac“ ir „Linux“ naudotojai turėtų būti gerai.)

3
04 нояб. atsakymas pateiktas Ethan 04 Nov. 2014-11-04 23:40 '14 at 11:40 2014-11-04 23:40

Klausimas gali būti dviprasmiškas, o tai reiškia „paskutinis“.

pvz., git log --graph rodo šiuos (supaprastintus):

 * commit H0 | * merge |\ | * commit B0 | | | * commit B1 | | * | commit H1 | | * | commit H2 |/ | 

Paskutiniai įrašai laiku yra H0, sujungti, B0. Norėdami juos sutraiškyti, turėsite iš naujo įdiegti susijungusią filialą į H1 įsipareigojimą.

Problema yra ta, kad H0 yra H1 ir H2 (ir paprastai daugiau įsipareigoja prieš susijungimą ir po šakos), bet B0 ne. Taigi reikia valdyti pokyčius iš H0, sujungti, H1, H2, B0 bent.

Galite naudoti perskaičiavimą, bet skirtingais būdais, o paskui kitus minėtus atsakymus:

rebase -i HEAD~2

Tai parodys jums pasirinkimus (kaip minėta kituose atsakymuose):

 pick B1 pick B0 pick H0 

Įdėkite skvošą vietoj rinkimo į H0:

 pick B1 pick B0 s H0 

Po išsaugojimo ir grąžinimo grąžinimo, po H1 bus užfiksuotas užraktas. Tai reiškia, kad jis vėl paprašys išspręsti konfliktus (kur HEAD pirmiausia bus H1 ir tada kaups fiksacijas, kai jos bus taikomos).

Baigę perskaičiuoti, galite pasirinkti pranešimą, skirtą susmulkintam H0 ir B0:

 * commit squashed H0 and B0 | * commit B1 | * commit H1 | * commit H2 | 

PS Jei tiesiog atliksite keletą BO nustatymų iš naujo: (pvz., Naudodamiesi reset --mixed , kuri išsamiau paaiškinta čia ngn-wiki.ru.site/questions/4636 / ... ):

 git reset --mixed hash_of_commit_B0 git add . git commit -m 'some commit message' 

tada susmulkinkite H0, H1, H2 pokyčius B0 (nuostoliai visiškai užfiksuoja pokyčius po atšakos ir prieš susijungimą).

3
25 мая '17 в 4:26 2017-05-25 04:26 atsakymas pateikiamas mažai, ką gegužės 25 d. 17:26 4:26

Be kitų puikių atsakymų, norėčiau pridurti, kad „ git rebase -i visada manęs painioja su tvirtinimo tvarka - nuo senesnių iki naujesnių ar atvirkščiai? Taigi, tai yra mano darbo eiga:

  1. git rebase -i HEAD~[N] , kur N yra norimų prisijungti skaičius, pradedant nuo naujausio. Taigi „ git rebase -i HEAD~5 reikštų, kad „paskutiniai 5 git rebase -i HEAD~5 prisiima naują“;
  2. Pasirodo redaktorius, kuriame pateikiamas sąrašas įsipareigojimų, kuriuos noriu sujungti. Dabar jie rodomi atvirkštine tvarka: viršuje yra viršutinis užraktas. Pažymėkite kaip „skvošas“ arba „s“, išskyrus visus pirmuosius / vyresnius: jis bus naudojamas kaip pradinis taškas. Išsaugokite ir uždarykite redaktorių;
  3. redaktorius vėl pasirodo su numatytuoju pranešimu naujam įvykiui: pakeiskite jį pagal savo poreikius, išsaugokite ir uždarykite. Skvošas baigtas!

Šaltiniai ir papildomi duomenys: №1 , №2 .

2
09 марта '18 в 12:51 2018-03-09 12:51 Atsakymą davė Ignorantas kovo 09 d. 18 val. 12:51 2018-03-09 12:51

Pažvelkite į šį punktą:

Gist - Easy git-squash

Pvz., Turėsite įvesti. git-squash 3 ir kas tai yra. Paskutiniai trys įsipareigojimai yra sujungti į vieną su susietais pranešimais.

2
21 дек. atsakymas duodamas kadelesalinas gruodžio 21 d. 2016-12-21 05:43 '16 at 5:43 am 2016-12-21 05:43

Jei norite, kad paskutiniai 10 skvošų, būtų padaryta 1 vieno įsipareigojimo:

 git reset --soft HEAD~10  git commit -m "squashed commit" 

Jei taip pat norite atnaujinti nuotolinį filialą naudodami suspaustą įsipareigojimą:

 git push -f 
2
21 авг. atsakymą pateikė Ayan 21 rug. 2018-08-21 22:25 '18, 10:25 val. 2018-08-21 22:25

Pirma, aš atpažinau, kiek yra įsipareigojimų tarp mano filialo ir dabartinio vedlio filialo.

 git checkout master git rev-list master.. --count 

Tada sukursiu kitą filialą, pagrįstą mano funkcijos filialu, nedarant įtakos my-feature filialui.

Galiausiai aš paleisiu

 git checkout my-feature git checkout -b my-rebased-feature git checkout master git checkout my-rebased-feature git rebase master git rebase head^x -i // fixup/pick/rewrite git push origin my-rebased-feature -f // force, if my-rebased-feature was ever pushed, otherwise no need for -f flag // make a PR with clean history, delete both my-feature and my-rebased-feature after merge 

Tikiuosi, kad tai padės, ačiū.

1
29 авг. atsakymą pateikė Alan Dong 29 rug. 2018-08-29 09:37 '18 ne 9:37 2018-08-29 09:37

Ką apie atsakymą į klausimą, susijusį su šiuo darbo procesu?

  1. daugelis vietinių įsipareigojimų, sumaišytų su keliais iš „FROM“ pagrindinio jungimo,
  2. galiausiai paspauskite nuotolinio valdymo pultą
  3. PR ir susijungimas. (Taip, kūrėjas būtų buvęs lengviau merge --squash po PR, tačiau komanda manė, kad tai sulėtins procesą.)

Šiame puslapyje nematau tokios darbo eigos. (Tai gali būti mano akys.) Jei teisingai suprantu teisingą rebase , kelioms asociacijoms reikės išspręsti kelis konfliktus . Aš net nenoriu apie tai galvoti!

Taigi atrodo, kad tai veikia mums.

  1. git pull master
  2. git checkout -b new-branch
  3. git checkout -b new-branch-temp
  4. redaguoti ir pataisyti daug vietos, reguliariai sujungti kapitoną
  5. git checkout new-branch
  6. git merge --squash new-branch-temp // visus etapo pakeitimus
  7. git commit 'one message to rule them all'
  8. git push
  9. Vertintojas pristato PR ir sujungia jį.
1
20 июня '18 в 22:28 2018-06-20 22:28 atsakymas į allenjom birželio 20, 18, 22:28 2018-06-20 22:28

Jei naudojate „ GitUp“ , pasirinkite įsipareigojimą, kurį norite sujungti su tėvais, ir paspauskite S. Jūs turėtumėte tai padaryti vieną kartą kiekvienam įvykiui, bet tai yra daug lengviau, nei ateina su teisinga komandų eilutės rašyba. Ypač jei tai, ką jūs darote tik laikas nuo laiko.

0
19 февр. SSteve atsakymas, pateiktas vasario 19 d 2016-02-19 03:52 '16 at 3:52 2016-02-19 03:52

Tiesiog pridėkite šią bash funkciją į savo „bash .zshrc“ failą.

 # Squash last X commits with a Commit message. # Usage: squash X 'COMMIT_MSG' # where X= Number of last commits. # where COMMIT_MSG= New commit msg. function squash() { if [ -z "${1}" -o -z "${2}" ]; then echo "Usage: \`squash X COMMIT_MSG\`" echo "X= Number of last commits." echo "COMMIT_MSG= New commit msg." return 1 fi git reset --soft HEAD~"$1" git add .  git ci -m "$2" # With 100 emoji git push --force } 

Tada tiesiog paleiskite

 squash X 'New Commit Message' 

Ir viskas yra paruošta.

0
23 мая '17 в 15:33 2017-05-23 15:33 Ahmad Awais atsakymas gegužės 23 d. 17:33 15:33

Kitas būdas tai padaryti, jei turite tam tikrą įsipareigojimą, yra git rebase -i <hashbeforeyouwanttosquash> po fiksavimo, pvz., git rebase -i <hashbeforeyouwanttosquash>

Tai leis redaktoriui pasirinkti / skvošti kaip įprasta.

Žr. Https://git-scm.com/docs/git-rebase#_interactive_mode

0
26 мая '18 в 21:47 2018-05-26 21:47 atsakymą pateikė Jazzy gegužės 26 d. 18, 21:47 2018-05-26 21:47

Ši komanda dirbo man - git rebase -i HEAD~<no. of commits you want to squash> git rebase -i HEAD~<no. of commits you want to squash>

taip pat norite patikrinti „ git log prieš platinimą, kad gautumėte faktinę vertę Nr. nuo įsipareigoja būti sutraiškyti!

-1
04 февр. atsakymą pateikė apsikeitimo sandoriai 04 vasaris. 2016-02-04 08:25 '16 at 8:25 am 2016-02-04 08:25

Eikite į pagrindinį skyrių ir įsitikinkite, kad esate atnaujintas:

sh git checkout master git fetch git pull

Sujungti savo funkcijos šaką į pagrindinį filialą:

sh git merge feature_branch

Nustatykite vietinį pagrindinį filialą į pradinę būseną:

sh git reset origin/master

Dabar visi pakeitimai laikomi pašalintais. Galite atlikti ir perkelti juos į vieną ar daugiau įsipareigojimų.

sh git add . --all git commit

-3
20 сент. Leo Lanese atsakymas 20 sep . 2017-09-20 18:27 '17, 18:27 pm 2017-09-20 18:27

Kiti klausimai apie žymes arba užduoti klausimą