Cum de a alege și de a fuziona numai o subpath de o caracteristică ramură de master

0

Problema

Am o problema interesanta (cel putin pentru mine.)

Am o master ramură și un feature ramură, care a fost despărțit de master un timp în urmă. O altă echipă păstrează actualizarea master ramură și echipa mea este doar de lucru pe feature ramură.

La master ramură include unele modificări care echipa mea nu este interesat. Ne pasă doar lor app folder, asta e. Chiar și în app dosarul, nu suntem interesați de tot, doar modificările care credem ca avem nevoie. Nu suntem fuzionează nostru feature ramură în master pentru că nu există tech-stack modificări care suntem de punere în aplicare și singurul lucru de care avem nevoie le este lor de cod JavaScript.

Între timp, suntem, de asemenea, face modificări în feature branch app folder. Deci, în app dosar, au unele modificări care nu avem, avem unele modificări care nu au. Vrem să păstrăm toate schimbările noastre, dar alege doar unele dintre schimbările lor.

Cum pot să merg despre unirea lor master branch app dosarul în feature branch app folder? Am fost cercetat de ore, a încercat unele VS Cod extensii pentru a previzualiza diferența dintre cele două dosare. Ceea ce caut este o interfață de unde pot Accepta sau Declin tot ceea ce vine de la master filiala pentru app folder. Deși acest lucru este preferința mea, eu sunt deschis la orice sugestii care ar rezolva această problemă.

Acest lucru poate suna ca o situație încurcată, dar echipa mea a pierdut unii membri pe ultimele două luni și diferența dintre ramuri a crescut mai mare și mai mare în fiecare săptămână. Acum vrem să rezolvăm această dată și pentru toate.

Multumesc pentru ajutor.

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

Ceea ce caut este o interfață de unde pot Accepta sau refuza tot ceea ce vine de la maestrul lui branch app folder

git checkout -p master app este brut, dar are o șansă decentă de a servi aici.

Dacă nu arată suficient pentru a decide ce vrei, următorul pas este selectivă a fuziona cu

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

care va folosi Git e automerge utilaje și lasă orice suprapunere sau pervaze schimbări pentru tine la fel ca de obicei, sau puteți salva dif de la un fișier și editați-l pentru a gusta înainte de a aplica, dacă ești atent.

2021-11-24 06:42:34
1

Există două moduri de a face acest lucru. Un simplu vă va ține la schimbări, dar aruncați orice comite-au făcut. Cel mai complex va păstra comite.

Recomandare

Ambele din cele două metode descrise mai jos au potențialul de a provoca merge conflicte și alte dureri de cap în jos linia, mai ales ca oamenii continuă să facă modificări pe ramura de master. În plus, dacă aveți modificări la aplicația/ folder în funcție de ramură, direct, folosind git aplica poate duce la modificări fiind suprascrise.

Mi-ar recomanda cu tărie unirea ramura de master în funcție de ramură, prin intermediul git merge cu nici o strivești. Dată fiind divergența ați menționat, nu poate fi uni conflicte, dar acest lucru este OK. Merge conflicte faci ce vrei: acestea vă permit să alegeți ce schimbări să accepte, și care să respingă.

Acestea fiind spuse, aici sunt două abordări, care sunt similare cu cherry-picking doar un singur folder.

Opțiunea 1: Aruncați comite, păstrează modificările

Această abordare este destul de drept înainte, și se folosește o combinație de git diff și git apply:

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

Acest lucru va:

  • Comuta la funcția de ramură (acest lucru este în cazul în care veți aplica modificările)
  • Obține toate modificările făcute la ramura de master, care nu sunt în funcție de ramură.
  • Filtru numai schimbări în app director
  • Aplica modificările prin git apply
  • Etapa modificări, adăugându-le la index (aceasta este ceea ce --index opțiune)

Singurul dezavantaj al acestei abordări este că nu va păstra istoria, sau comite mesaje.

De acolo, puteți efectua schimbările tine:

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

Opțiunea 2: Obține atât angajează și modificări

Acesta este un pic mai complicat, și se bazează pe git format-patch.

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

Acest lucru va:

  • Comuta la funcția de ramură (în cazul în care veți aplica modificările)
  • Obține toate modificările făcute la ramura de master, care nu sunt pe caracteristica de ramură
  • Filtru de numai modificările efectuate în app director
  • Format aceste ca o serie de patch-uri (care conțin comite mesaje, autori, etc.)
  • Se aplică toate aceste patch-uri folosind git sunt

Rețineți că, în funcție de conținutul de modificări, acest lucru poate duce la un eșec pe care va trebui să rezolve manual. (Se va avertiza la acest lucru)

2021-11-24 21:55:27

În alte limbi

Această pagină este în alte limbi

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