La cosa fondamentale che vorrai qui è git add -p
( -p
è sinonimo di --patch
). Ciò fornisce un modo interattivo per archiviare il contenuto, permettendoti di decidere se ogni hunk dovrebbe entrare e persino di modificare manualmente la patch se necessario.
Per usarlo in combinazione con cherry-pick:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(Grazie a Tim Henigan per avermi ricordato che git-cherry-pick ha un'opzione --no-commit, e grazie a Felix Rabe per aver sottolineato che devi resettare! Se vuoi solo lasciare alcune cose fuori dal commit , è possibile utilizzare git reset <path>...
per disinstallare solo quei file.)
Ovviamente puoi fornire percorsi specifici a add -p
se necessario. Se stai iniziando con una patch, puoi sostituirla cherry-pick
con apply
.
Se vuoi davvero un git cherry-pick -p <commit>
(quell'opzione non esiste), puoi usare
git checkout -p <commit>
Ciò differirà il commit corrente rispetto al commit specificato e consentirà di applicare singoli blocchi da tale diff singolarmente. Questa opzione può essere più utile se il commit che stai eseguendo ha conflitti di unione in parte del commit che non ti interessa. (Nota, tuttavia, che checkout
differisce da cherry-pick
: checkout
tenta di applicare <commit>
del tutto i contenuti, cherry-pick
applica la diff il commit specificato dal suo genitore. Ciò significa che checkout
può applicare più di quel semplice commit, che potrebbe essere più di quello che desideri.)