Ako cherry-vybrať a zlúčiť len úsek z funkcie, pobočka master

0

Otázka

Mám zaujímavý problém (aspoň pre mňa.)

Mám master pobočky a feature pobočka, ktorá bola rozišli jeho cesta od master pred chvíľou. Ďalší tím drží aktualizácia master pobočky a môj tím je len práca na feature pobočky.

Na master pobočka obsahuje niektoré zmeny, ktoré môj tím nie je záujem. Sme sa stará len o svoje app priečinok, to je všetko. Aj v app priečinok, nie sme záujem o všetko, len zmeny, ktoré si myslíme, že potrebujeme. Nie sme zlučujúcich sa naše feature do ich pobočky master pretože tam je tech-zásobník zmeny, ktoré sme implementovali a jediné, čo potrebujeme z nich je ich JavaScript kód.

Medzitým, sme aj robiť zmeny v feature pobočky app priečinok. Tak v app priečinok, majú niektoré zmeny, ktoré nemáme, máme niektoré zmeny, ktoré nemajú. Chceme, aby všetci naši zmeny, ale vybrať len niektoré z ich zmeny.

Ako môžem ísť o zlučujúcich sa ich master pobočky app priečinok, do našej feature pobočky app priečinok? Bol som skúmal hodín, pokúsili niektoré VS Kód rozšírení náhľad rozdiel medzi dva priečinky. To, čo som hľadal je rozhranie, kde by som mohol Prijať alebo Odmietnuť všetko, čo príde z master pobočky " app priečinok. Aj keď je to moja záľuba, som otvorená na všetky návrhy, ktoré by tento problém vyriešiť.

Môže to znieť ako neusporiadaný situáciu, ale môj tím stratil niektorí členovia v priebehu posledných pár mesiacov a rozdiel medzi pobočiek rástla väčšie a väčšie každý týždeň. Teraz chceme to vyriešiť raz a navždy.

Vďaka za vašu pomoc.

cherry-pick git merge
2021-11-24 00:41:33
2
1

To, čo som hľadal je rozhranie, kde by som mohol Prijať alebo Odmietnuť všetko, čo prichádza od majstra pobočky app priečinok

git checkout -p master app je surové, ale stojí slušnú šancu slúžiť tu.

Ak to nie ukazuje dosť rozhodnúť, čo chcete, ďalší krok je selektívne zlúčiť s

git diff --merge-base @ master -- app | git apply -3

ktoré budú používať Git je automerge strojov a opustiť žiadne prekrývanie alebo susednými zmien môžete vyriešiť ako obvykle, alebo si môžete uložiť porovnanie na súbor a upraviť ju na chuť, pred použitím ho, ak budete opatrní.

2021-11-24 06:42:34
1

Existujú dva spôsoby, ako to urobiť. Jednoduchšie jeden bude držať zmeny, ale zahoďte všetky úkony budú vykonané. Zložitejšie jeden sa zaväzuje zachovať.

Odporúčanie

Obe dve metódy uvedené nižšie majú potenciál spôsobiť zlúčiť konflikty a iné bolesti hlavy dole riadok, a to najmä, ako sa ľudia aj naďalej, aby sa zmeny na úrovni pobočky. Okrem toho, ak budete mať zmeny na aplikáciu alebo zložku v extra pobočky, priamo cez git vzťahujú môže mať za následok zmeny prepísaním.

Chcel by som vám odporučiť, aby zlúčenie master pobočky do funkcie prostredníctvom pobočky git merge s č squashing. Vzhľadom na rozdiely spomínali ste, tam sa môže zlúčiť konflikty, ale to je OK. Zlúčiť konflikty robiť, čo chcete: nechali si vybrať, ktoré zmeny, ak chcete prijať, a čo odmietnuť.

Ako už bolo povedané, tu sú dva prístupy, ktoré sú podobné cherry-picking len jednej zložky.

Možnosť 1: Zrušenie zaväzuje, zachovať zmeny

Tento prístup je docela rovno vpred, a používa kombinácia git diff a git apply:

git switch feature
git diff feature..master -- app | git apply --index

To bude:

  • Prepnúť na funkciu pobočky (to je miesto, kde budete uplatniť zmeny)
  • Získajte všetky zmeny vykonané na hlavné pobočky, ktoré nie sú v extra pobočky.
  • Filter len zmeny v app adresár
  • Aplikovať zmeny prostredníctvom git apply
  • Etapy zmeny pridaním index (to je to, čo --index voľba sa)

Jedinou nevýhodou tohto prístupu je, že to nebude zachovať históriu, alebo spáchať správy.

Odtiaľ, môžete vykonať zmeny sami:

git commit -m "Apply changes made to master branch"

Možnosť 2: tak sa zaväzuje a zmeny

To je trochu zložitejšie, a to sa opiera o git format-patch.

git switch feature
git format-patch --stdout feature..master -- app | git am

To bude:

  • Prepnúť na funkciu pobočky (kde si budete môcť uplatniť zmeny)
  • Získajte všetky zmeny vykonané na hlavné pobočky, ktoré nie sú v extra pobočky
  • Filter iba zmeny vykonané v app adresár
  • Formát týchto ako séria záplaty (obsahujúce spáchať správy, autorov, atď.)
  • Platia všetky tieto škvrny pomocou git am

Upozorňujeme, že v závislosti na obsah zmeny, môže to mať za následok zlyhanie, ktoré budete musieť vyriešiť ručne. (To si vás upozorniť na to)

2021-11-24 21:55:27

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