Domanda

Ho due rami dal mio maestro:

  • v2.1 : (versione 2) Ho lavorato per diversi mesi
  • WSS : che ho creato ieri di aggiungere una caratteristica specifica al mio padrone (in produzione)

C'è un modo per copiare i commit di ieri da WSS a V2.1?

È stato utile?

Soluzione

Si dovrebbe davvero avere un flusso di lavoro che ti permette di fare tutto questo con la fusione:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (wss)

Quindi, tutto quello che dovete fare è git checkout v2.1 e git merge wss. Se per qualche motivo davvero non si può fare questo, e non è possibile utilizzare git rebase per spostare il ramo wss al posto giusto, il comando per afferrare un singolo commit da qualche parte e applicare è altrove git cherry-pick . Basta controllare il ramo che si desidera applicare su, ed eseguire git cherry-pick <SHA of commit to cherry-pick>.

Alcuni dei modi REBASE potrebbe risparmiare:

Se la vostra storia è simile al seguente:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (v2-only) - x - x - x (wss)

Si potrebbe utilizzare git rebase --onto v2 v2-only wss per spostare WSS direttamente su v2:

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - x - x (v2-only)
           \
             x - x - x (wss)

Quindi è possibile unire! Se davvero, davvero, davvero non può arrivare al punto in cui è possibile unire, è comunque possibile utilizzare rebase per fare in modo efficace diversi ciliegio-picks in una sola volta:

# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase

Nota: il motivo per cui ci vuole un po 'di lavoro extra per fare questo è che sta creando duplicati impegna nel repository. Questo non è davvero una buona cosa - il punto di facile ramificazione e la fusione è quello di essere in grado di fare tutto da fare commit (s) un posto e loro fusione in ovunque sono necessari. Duplicate commette significa un intento mai di unire questi due rami (se si decide che si desidera in seguito, si otterrà conflitti).

Altri suggerimenti

Usa

git cherry-pick <commit>

per applicare <commit> al tuo ramo corrente .

mi sarei probabilmente un controllo incrociato i commit ho scelta nel gitk e cherry-pick con fa clic destro sulla voce commettere invece.


Se vuoi andare più automatico (con tutti i suoi pericoli) e assumendo tutti i commit da ieri è accaduto il WSS si potrebbe generare l'elenco dei commit che utilizzano git log con (--pretty suggerito da Jefromi)

git log --reverse --since=yesterday --pretty=%H

così tutto insieme a patto di utilizzare bash

for commit in $(git log --reverse --since=yesterday --pretty=%H);
do
    git cherry-pick $commit
done

Se qualcosa va storto qui (c'è un sacco di potenziale) si è in difficoltà dal momento che questo funziona su cassa in diretta, quindi o fare manuali ciliegia-picks o usare rebase come suggerito da Jefromi.

git cherry-pick: Applicare le modifiche introdotte da alcuni commit esistenti

Supponiamo di avere ramo A con (X, Y, Z) commette. Abbiamo bisogno di aggiungere questi si impegna ad espandersi B . Abbiamo intenzione di usare l'operazione cherry-pick.

Quando usiamo cherry-pick, dovremmo aggiungere commit sul ramo B nello stesso ordine cronologico che i commit appaiono nel ramo A .

cherry-pick supporta una vasta gamma di commit, ma se avete fondersi impegna in tale intervallo, diventa molto complicato

git checkout B
git cherry-pick SHA-COMMIT-X
git cherry-pick SHA-COMMIT-Y
git cherry-pick SHA-COMMIT-Z

Esempio di flusso di lavoro:

 entrare descrizione dell'immagine qui

Possiamo usare cherry-pick con opzioni rel="noreferrer">

-e o --edit :. Con questa opzione, git cherry-pick vi permetterà di modificare il messaggio di commit prima di commettere

-n o --no-commit : Di solito il comando crea automaticamente una sequenza di commit. Questa bandiera applica le modifiche necessarie per cherry-pick ogni nome di impegnarsi per il vostro albero di lavoro e l'indice, senza fare alcun commit. Inoltre, quando questa opzione viene utilizzata, l'indice non deve corrispondere al HEAD commesso. Il cherry-pick viene fatto contro lo stato iniziale del tuo indice.

Ecco un interessante articolo concernente cherry-pick.

Si potrebbe creare una patch dai commit che si desidera copiare e applicare la patch al ramo di destinazione.

o se siete po 'meno sul lato dell'evangelista Si può fare un po' brutto modo sto usando. In deploy_template ci sono impegna voglio copiare il mio padrone come ramo deploy

git branch deploy deploy_template
git checkout deploy
git rebase master

Questo creerà nuova Deploy ramo (io uso -f sovrascrivere esistente distribuire ramo) su deploy_template, allora rebase questo nuovo ramo sul maestro, lasciando intatta deploy_template.

Per il semplice caso di semplice copia dell'ultima commit di ramo WSS a V2.1, si può semplicemente prendere l'id commit (git log --oneline | head -n 1) e fare:

git checkout v2.1
git merge <commit>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top