Scenario: un repository con parti della storia totalmente disconnesse. Per esempio. da diversi telecomandi che non hanno una cronologia git comune. (Questo si verifica in genere in scenari con sottostruttura git.)git cherry-pick un diff tra commit senza storia comune?
E 'possibile selezionare il differenziale tra questi due commit, anche se non hanno una storia comune? (E si impegnano l'attivo non ha una storia comune con uno di questi due)
ho provato questo (in una sottodirectory con -X subtree=sub/dir
opzionale):
git cherry-pick -X subtree=vendor/package aaa/aaa..bbb/bbb
Senza sottostruttura, questo sarebbe stato più semplice:
git cherry-pick aaa/aaa..bbb/bbb
Dove aaa/aaa e bbb/bbb sono due commit con cronologia disconnessa.
Sfortunatamente, questo non funziona: l'aaa/aaa..bbb/bbb non viene letto come diff, ma qualcos'altro.
Lo stesso può essere visualizzato con git show aaa/aaa..bbb/bbb
, che è abbastanza diverso da git diff aaa/aaa bbb/bbb
. Per esempio. se entrambi hanno file identici, allora git diff sarà vuoto, ma git show a..b mostrerà solo b, ma non a.
Nota: il mio caso di utilizzo personale è con uno sfondo sottosale. Ne parlo per evitare un caso d'uso artificiale, in cui le persone in genere iniziano a discutere sulla validità del caso d'uso anziché sulla domanda vera e propria.
Una risposta ideale in primo luogo affronterà il caso generale e quindi affronterà il caso del sottoalbero.
git apply è una buona idea! Ma non sono sicuro che i tuoi comandi facciano ciò che è promesso. – donquixote
Il problema che vedo con il cherry-pick è che selezionerà solo l'ultimo commit, non l'intero range di commit che porta da aaa/aaa a bbb/bbb (che in realtà non esiste - questo è il punto). – donquixote