Come cherry-pick e unire solo un sottotracciato da un ramo ad un master

0

Domanda

Ho un problema interessante (almeno per me.)

Ho un master ramo e un feature ramo, che è stata divisa da master un po ' di tempo fa. Un'altra squadra continua ad aggiornare le master ramo e la mia squadra è solo lavorando su feature ramo.

Il master filiale include alcune modifiche che la mia squadra non è interessato. Ci importa solo di loro app cartella, che è. Anche in app cartella, non siamo interessati a tutto ciò, solo le modifiche che riteniamo necessarie. Noi non siamo la nostra unione feature di ramo in loro master perché c'è tech-stack cambiamenti che stiamo attuando e la sola cosa che ci serve è la loro codice JavaScript.

Nel frattempo, ci sono anche di apportare modifiche nel feature ramo app cartella. Così nel app cartella, dispone alcune modifiche che non abbiamo, ci sono alcune modifiche che non hanno. Vogliamo mantenere tutti i nostri cambiamenti, ma solo di raccogliere alcuni di loro cambiamenti.

Come posso fare per unire i master ramo app cartella nel nostro feature ramo app cartella? Ho fatto delle ricerche per ore, provato un po ' di VS estensioni di Codice per visualizzare in anteprima la differenza tra le due cartelle. Quello che sto cercando è un interfaccia dove posso Accettare o Rifiutare tutto ciò che viene da master ramo `app cartella. Anche se questa è la mia preferenza, io sono aperto a qualsiasi suggerimento che potrebbe risolvere questo problema.

Questo può sembrare incasinato la situazione, ma la mia squadra ha perso alcuni membri negli ultimi due mesi e la differenza tra i rami cresciuto sempre di più ogni settimana. Ora vogliamo risolvere una volta per tutte.

Grazie per il vostro aiuto.

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

Quello che sto cercando è un interfaccia dove posso Accettare o Rifiutare tutto ciò che viene da master ramo app cartella

git checkout -p master app è grezzo, ma si trova una discreta possibilità di servire qui.

Se non mostrando abbastanza per decidere cosa si vuole, il passo successivo è selettiva, in unione con

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

che l'uso di Git automerge macchinari e lasciare eventuali sovrapposizioni o adiacenti le modifiche per voi per risolvere, come al solito, o si può salvare la diff di un file e modificare a piacimento prima di applicarlo, se stai attento.

2021-11-24 06:42:34
1

Ci sono due modi per fare questo. La più semplice volontà di mantenere le modifiche, ma scartare qualsiasi impegna hanno fatto. Il più complesso di conservare il commit.

Raccomandazione

Entrambi i due metodi descritti di seguito hanno il potenziale di causare conflitti di unione e di altri mal di testa lungo la linea, soprattutto come persone continuare a fare modifiche sul ramo master. Inoltre, se si dispone di modifiche per l'applicazione/ cartella in funzione ramo, direttamente utilizzando git applicare può comportare le modifiche vengano sovrascritti.

Raccomando caldamente la fusione del ramo master in funzione filiale di via git merge con nessun schiacciamento. Data la divergenza che hai citato, ci possono essere conflitti di unione, ma questo è OK. Unire i conflitti di fare quello che vuoi: essi consentono di scegliere le modifiche da accettare e quali rifiutare.

Detto questo, qui ci sono due approcci che sono analoghi a cherry-picking solo una singola cartella.

Opzione 1: Eliminare impegna, mantenere le modifiche

Questo approccio è abbastanza straight-forward, e si utilizza una combinazione di git diff e git apply:

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

Questo permetterà di:

  • Interruttore per la funzione di filiale (questo è dove potrete applicare le modifiche)
  • Ottenere tutte le modifiche apportate al ramo master, che non dispongono di ramo.
  • Filtro solo le modifiche nel app directory
  • Applicare le modifiche via git apply
  • Stage le modifiche con l'aggiunta di indice (questo è ciò che il --index opzione)

L'unico svantaggio di questo approccio è che non preservare la storia, o messaggi di commit.

Da lì, è possibile eseguire il commit delle modifiche da te:

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

Opzione 2: Ottenere entrambi si impegna e modifiche

Questo è un po ' più complicato, e si basa su git format-patch.

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

Questo permetterà di:

  • Interruttore per la funzione di filiale (in cui sarai in grado di applicare le modifiche)
  • Ottenere tutte le modifiche apportate al ramo master, che non dispongono di ramo
  • Filtro da solo le modifiche apportate in app directory
  • Il formato di questi come una serie di patch (che contiene i messaggi di commit, autori, ecc)
  • Applicare tutte le patch utilizzando git am

Si noti che a seconda del contenuto delle modifiche, questo potrebbe portare a un fallimento che dovrete risolvere manualmente. (Ti avviso è per questo)

2021-11-24 21:55:27

In altre lingue

Questa pagina è in altre lingue

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