Jak vybírat a sloučit pouze subpath z tematické větve master

0

Otázka

Mám zajímavý problém (tedy alespoň pro mě.)

Mám master pobočky a feature větev, která byla rozešli cestě z master před chvílí. Další tým udržuje aktualizaci master pobočky a můj tým pracuje pouze na feature pobočky.

Na master pobočka zahrnuje některé změny, které můj tým není zájem. Zajímáme se pouze o jejich app složky, a je to. I v app složky, nejsme zájem o všechno, jen změny, které si myslíme, že potřebujeme. Nejsme sloučení našich feature pobočky do jejich master protože tam je tech-stack změny, které zavádíme, a jediné, co potřebujeme od nich je jejich kód v Javascriptu.

Mezitím jsme se také, že změny v feature pobočky app složky. Takže v app složky, které mají některé změny, které nemáme, máme některé změny, které nemají. Chceme, aby všechny naše změny, ale vybrat pouze některé jejich změny.

Jak mohu jít o jejich sloučení master pobočky app složku, do našeho feature pobočky app složky? Byl jsem zkoumá hodiny, snažili některé VS Kód rozšíření náhledu na rozdíl mezi těmito dvěma složkami. To, co jsem jsem hledal je rozhraní, kde můžu Přijmout nebo Pokles vše, co pochází z master pobočka je app složku. I když je to moje preference, jsem otevřený jakékoli návrhy, které by tento problém vyřešit.

Může to znít jako blbá situace, ale můj tým ztratil některé členy za posledních pár měsíců a rozdíl mezi větve rostly větší a větší, každý týden. Nyní chceme vyřešit jednou provždy.

Díky za vaši pomoc.

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

To, co jsem jsem hledal je rozhraní, kde můžu Přijmout nebo Odmítnout vše, co pochází od mistra pobočky app složky

git checkout -p master app je surový, ale stojí slušnou šanci sloužit.

Pokud to není to ukazuje dost se rozhodnout, co chcete, je dalším krokem je selektivní sloučení s

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

který se bude používat Git je automerge stroje a opustit žádné překrývající se nebo na sebe navazující změny pro vás vyřešit jako obvykle, nebo si můžete uložit rozdílů do souboru a upravit ji podle chuti před použitím, pokud jste opatrní.

2021-11-24 06:42:34
1

Existují dva způsoby, jak to udělat. Jednodušší, kdo bude mít změny, ale zlikvidujte všechny zavazuje udělali. Složitější bude zachovat zavazuje.

Doporučení

Obě dvě metody popsané níže mají potenciál způsobit sloučit konflikty a jiné bolesti hlavy, zejména jako lidé i nadále, aby se změny na hlavní větvi. Navíc, pokud máte změny do aplikace/ složky v tematické větvi, a to přímo pomocí git použije, může mít za následek změny byly přepsány.

Chtěl bych důrazně doporučujeme sloučení větev master do větve funkcí prostřednictvím git merge s ne rozmáčknout. Vzhledem k divergenci jste zmínil, může být sloučit konflikty, ale to je v POŘÁDKU. Sloučit konflikty dělat, co chcete: oni si vybrat, které změny přijmout a které odmítnout.

Že být řekl, zde jsou dva přístupy, které jsou obdobou cherry-picking pouze jedné složky.

Varianta 1: Zrušit zavazuje, aby změny

Tento přístup je docela rovně vpřed, a to se používá kombinace git diff a git apply:

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

To bude:

  • Přepnout do větve funkcí (to je místo, kde budete aplikovat změny)
  • Získejte všechny změny provedené v hlavní větvi, které nejsou na tematické větvi.
  • Filtr pouze změny v app adresář
  • Použít změny pomocí git apply
  • Fáze změny, které přidáním do indexu (to je to, co --index možnost se)

Jediná nevýhoda tohoto přístupu je, že to nebude zachovat historii, nebo spáchat zprávy.

Od tam, můžete potvrdit změny sami:

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

2. možnost: Dostat se oba dopustí a změny

Tenhle je trochu složitější, a to se spoléhá na git format-patch.

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

To bude:

  • Přepnout do větve funkcí (kde budete aplikovat změny)
  • Získejte všechny změny provedené v hlavní větvi, které nejsou na větve funkcí
  • Filtrovat podle pouze změny provedené v app adresář
  • Formát těchto jako série patchů (obsahující komitových zpráv, autorů, atd.)
  • Použít všechny tyto skvrny pomocí git am

Všimněte si, že v závislosti na obsah změny, a to může mít za následek selhání, které budete muset řešit ručně. (Bude to upozorní vás na to)

2021-11-24 21:55:27

V jiných jazycích

Tato stránka je v jiných jazycích

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