Ako môžem bezbolestne zlúčiť rozdielne funkcie pobočiek?

0

Otázka

Mám otvorený PR na pobočku s názvom feature-b čoskoro budú zlúčené do main. Však som to napísal na podporu môj feature-a pobočka, ktorá prebieha. Chcem pokračovať v práci na feature-a a pákového efektu prácu, ktorú som urobil v feature-b predtým to bolo zlúčené do main.

Aký je najlepší spôsob pre mňa urobiť? Naše zlúči do main sú skoncovala, takže všetky úkony na feature-b budú prepísané ako jeden zaviazať, keď je zlúčené do main. Preto, rebasing feature-a na feature-b teraz bude mať v budúcnosti konfliktu bolesť, keď som korešpondencie feature-a na main pretože rovnaké zmeny sa uskutočnili v rôznych zaväzuje.

Aký je najlepší spôsob pre mňa zahŕňať zmeny v feature-b v mojom feature-a pobočka zároveň minimalizovať budúce bolesť, keď som sa nakoniec korešpondencie feature-a na main?

AKTUALIZÁCIA

Išiel som dopredu a:

  1. Rebased feature-a na feature-b
  2. Vykonané ďalšie zmeny (len 1 commit) na feature-a zatiaľ čo feature-b bol preskúmaný
  3. Squash-zlúčený feature-b raz to bolo schválené (žiadne ďalšie zmeny sa vyžaduje, aby feature-a už má presný kód, ktorý bol zlúčený)
  4. Vytiahol najnovšie main a rebased feature-a na vrchole

Ako sa bál, git sa sťažuje, že niektoré súbory sú "obe upravené" alebo "obe pridané". To samo o sebe by byť trochu nepríjemné, ale jednoduché opraviť. Čo je to neuveriteľne mätúce najmä v prípade, ak akékoľvek odstupom času prešlo, - je zlúčiť svoje komentáre do súborov.

Aj keď obe main a feature-a konáre majú presne rovnaký kód v všetky súbory, mám super nepríjemné správanie:

  1. Pre "ako dodal," súbory, zlúčiť komentáre sú pridané na "HLAVU (Aktuálne Zmeny)" a "rodič #HASH (správy denníka)". Som nútený vybrať jedno, alebo druhé, aj keď sú presne také isté!
  2. Pre "obe upravené" súbory, to je ešte horšie. "HLAVU (Aktuálne Zmeny)" ukazuje správny kód. Avšak, "rodič #HASH (správy denníka)" sekcia ukazuje polovicu kód. Opäť, aj keď obe vetvy majú všetky kódu!! Nerobím si srandu, prijatie "prichádzajúce zmeny" (ako označené VS Kód) odstráni kód, ktorý je v oboch pobočkách!

Keby som robil tieto zmeny v rýchlom slede za sebou, ja by som sa beznádejne stratený a zmätený o tom, čo git ukazuje mi. To, že má skutočne stalo niekoľkokrát v minulosti, ale nemohol som dať prst na to, čo sa deje zle. Teraz, keď som sa reprodukovať to a overiť správanie, som úplne flummoxed čo git je na tom a ako ľudia žijú s týmto scenárom.

AKTUALIZÁCIA 2

OK, som trochu vidieť, prečo to bolo ísť na odstránenie kódu teraz. Je to preto, že zmeny, ktoré som robil v feature-b boli vo viacerých zaväzuje, a tých, zaväzuje sa, že skončil ako skoncovala, keď zlúčenie do main nastala. Toto je pochýb o tom, že zdroj bolesti a prečo sa snažím vymyslieť saner workflow.

git
2021-11-23 23:26:24
1

Najlepšiu odpoveď

0

Nie som presvedčený, konečné zlúčiť/squash bude chaotický. Ak rovnaký zmena bola vykonaná v rôznych zaväzuje, možno Git môže zistiť, že a byť šťastní s ním.

Ak si myslíte, že to bude chaotický tomu, čo by ste mohli urobiť, je:

  1. Vaše Rebase feature-a pobočka s feature-b teraz, tak, že feature-a pobočka v súčasnosti obsahuje vyplnený funkciu B a in-progress funkciu, ktorú je to, čo musíte urobiť svoju prácu..
  2. Po feature-b dostane zlúčené do main pobočky, rebase feature-a na odovzdanie bezprostredne pred tým skoncovala zaviazať, že urobili pre funkciu B. To by malo ísť hladko.
  3. Na svoje feature-a pobočky, použitie git reset --soft X kde X je odovzdanie hash pre skoncovala zaviazať, že robil pre funkciu B. Potom pomocou git commit aby sa zaviazať. Teraz máte skoncovala zaviazať, ktorého obsah sa rovná aktuálny stav vašej práce na funkciu A. toto spáchať je rodič je zaviazať, že pridaná funkcia B na hlavné vetvy, tak to zaviazať sa to porovnať s, že rodič bude iba obsahujú funkciu A. To je v poriadku, ak chcete pokračovať v práci na funkciu v tomto bode, alebo len požiadať o zlúčenie.

Mimochodom, som si dosť istý, veci, ktoré by nemuseli byť tento chaotický ak vaša organizácia používa zlúči namiesto rebases pridať veci hlavné vetvy. A potom by tam byť v prospech zachovania skutočná história kód, ktorý ste pracovali, namiesto toho, aby práve zachovanie tejto umelé histórie.

2021-11-23 23:52:54

Aby bolo jasné, nepoužívame rebases - používame skoncovala zaväzuje. A ja som si na 99% istý, že veci sa byť chaotický, ako vyskúšal som to už v minulosti. Git dostane strašne zmätený odlišné zaväzuje urobiť rovnaký zmeny. Som ochotný skúsiť to znova, keď nahlásiť späť :)
me--

@mňa-som si istá, že skoncovala zaväzuje je rebase
evolutionxbox

Rebasing znamená presun pobočky tak začína iný bod, ktorý prepíše históriu, ako to bolo vyvinuté. Squashing znamená mení celú pobočku do len jeden zaviazať, že zahodenie históriu, ako to bolo vyvinuté s výnimkou konečného výsledku.
David Grayson

@DavidGrayson pozri môj aktualizované otázka pre vysvetlenie správanie vidím z git.
me--

OK. Váš krok 4 ("Vytiahol najnovšie hlavné a rebased funkcia-na vrchole"), čo je spôsobené si všetky bolesti, takže to nie je niečo, čo by som odporúčať tým, čo robí. Namiesto toho, aby krok 4 na vašu otázku, skúste kroky 2 a 3 z môjho odpoveď.
David Grayson

Vďaka @DavidGrayson. Zdá sa tak . . . namáhavý
me--

Ako som povedal v odpovedi, problémov je spôsobená osobou, ktorá robí všetko toto čítanie a squashing namiesto jednoducho zlučovanie.
David Grayson

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................