Kaip sujungti daugybę įsipareigojimų, bet palikti?

Tarkime, aš turiu šią foo funkciją. Dabar noriu sujungti jį atgal į šeimininką, bet pridėjau derinimo kodą, kurio nereikia valdyti.

Derinimo kodas yra pats įsipareigojimas, todėl galiu naudoti „ git cherry-pick “ kiekvienam įvykiui ir palikti jį atlikti. Bet tai bus gana varginantis.

Ar yra kokių nors „atvirkštinių vyšnių rinkėjų“, kurie tai daro, arba interaktyvus susiliejimas?

74
26 окт. Dave Vogt nustatė spalio 26 d 2009-10-26 16:13 '09, 16:13, 2009-10-26 16:13
@ 5 atsakymai

Naudokite perkėlimą internetu:

 git rebase -i SHA-OF-FIRST-COMMIT-IN-BRANCH 

Tai atsidarys kažkas panašaus į savo $ EDITOR:

  pick 8ac4783 folders and folders pick cf8b1f5 minor refactor pick 762b37a Lots of improvement. Folders adn shit. pick 3fae6e1 Be ready to tableview pick b174dc0 replace folder collection view w/ table view pick ef1b65b more finish pick ecc407f responder chain and whatnot pick 080a847 play/pause video pick 6719000 wip: movie fader pick c5f2933 presentation window fade transition # Rebase e6f77c8..c5f2933 onto e6f77c8 # # Commands: # p, pick = use commit # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # 

Taigi, tiesiog norite ištrinti eilutę, kurioje yra debugas, parašyti failą ir uždaryti redaktorių, ir git jums pasakys panašias eilutes:

 Successfully rebased and updated refs/heads/master. 

Dabar galite paprasčiausiai sujungti šią temą valdymui.

ATNAUJINIMAS: Pažymėtina, kad istorijos keitimas naudojant rebase turėtų vykti tik privačiuose filialuose. Jei šis temas buvo atviras visuomenei, naudokite git revert , kaip siūlo kitas atsakovas.

54
26 окт. atsakymas į Harry Vangberg spalio 26 d 2009-10-26 16:16 '09, 16:16, 2009-10-26 16:16

Nors kiti SCM yra naudojami, git , git revert yra atvirkštinis vyšnių pasirinkimas.

border=0
67
26 окт. Charles Bailey atsakymas, spalio 26 d 2009-10-26 16:16 '09, 16:16, 2009-10-26 16:16

Dar viena idėja yra pridėti atšauktą įsipareigojimą derinimo kodu ir sujungti jį į savo pagrindinę šaką. Vėliau pašaliname šį papildomą nustatymą foo filialuose.

 git checkout foo git revert COMMIT_REF_WITH_DEBUG_CODE git checkout master git merge foo git checkout foo git reset --hard HEAD~1 

Įsitikinkite, kad darbo medis yra švarus. Pirmiausia sukurkite atšauktą įvykį. Tada sujunkite jį į šeimininką. Tada iš naujo nustatykite filialo šakos žymeklį į grįžtamojo įsipareigojimo pagrindinį elementą, todėl jis grįžta į pradinę būseną.

Jei nenorite naudoti „ git reset , galite sukurti laikiną filialą, kuriame bus sukurtas atšauktas įsipareigojimas. Pabaigoje ištrinate laikinąjį filialą.

7
26 июля '11 в 21:30 2011-07-26 21:30 atsakymą pateikė Paul Pladijs, liepos 26 d. 11, 21:30 2011-07-26 21:30

Jei norite pašalinti įsipareigojimus, kurių nenorite, naudokite iš naujo.

Naujame „foo-merge“ filialas, sukurtas iš „foo“:

 git rebase -i master 

Kai būsite pataisymo redagavimo režime, ištrinkite eilutes, kuriose yra debugų, įrašykite ir uždarykite redaktorių.

Po perkrovimo tiesiog patraukite „foo-merge“ į „master“:

 git checkout master git pull . foo-merge 
2
27 окт. atsakymas, kurį pateikė Yang Zhao spalio 27 d 2009-10-27 10:06 '09, 10:06 am. 2009-10-27 10:06

Man pavyko:

 git rebase -p --onto SHA^ SHA 

Kur SHA yra pataisa, kurią norite ištrinti.

per http://sethrobertson.github.io/GitFixUm/fixup.html#remove_deep

0
08 апр. atsakymas, kurį pateikė michaeljoseph 08 balandžio. 2016-04-08 12:47 '16 at 12:47 2016-04-08 12:47

Kiti klausimai apie žymes arba Užduoti klausimą