2013-05-31 13 views
17

Mi chiedo se è possibile la raccolta della ciliegia dalla scorta.Come scegliere la ciliegina dalla scorta in git?

git stash save "test cherry-pick from stash" 

*git cherry-pick [email protected]{0}* --> Is this possible? 

sto ottenendo il seguente exception quando ho provato sopra command:

Error:

~/Documents$ git cherry-pick [email protected]{0} 
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given. 
fatal: cherry-pick failed 

risposta

23

Il problema è che uno stash consiste di due o tre commit. Durante la memorizzazione, l'albero di lavoro modificato viene memorizzato in un commit, l'indice in un commit e (se si utilizza il flag --include-untracked) tutti i file non tracciati in un terzo commit.

È possibile vedere questo se si utilizza gitk --all e fare una scorta.

enter image description here

[email protected]{0} punti per il commit che contiene l'albero di lavoro.

È possibile tuttavia cherry-pick da quella commettere se si fa

git cherry-pick "[email protected]{0}" -m 1 

La ragione per cui cherry-pick pensa che la scorta è una fusione, e quindi ha bisogno il parametro -m 1 è che la scorta commettere ha genitori multpile, come puoi vedere nel grafico.

Non sono sicuro di cosa si voglia ottenere con la raccolta delle ciliegie. Una possibile alternativa è creare un ramo dalla scorta. Applica le modifiche lì e unirle al tuo attuale ramo.

git stash branch stashchanges 
git commit -a -m "changes that were stashed" 
git checkout master 
git merge stashchanges 
+1

>> Non sono proprio sicuro di cosa si vuole ottenere scegliendo il cherry-picking? - Nel mio caso, una semplice unione andrebbe bene facendo stash apply/pop. Ma, mi stavo chiedendo se posso scegliere tra pochi cambiamenti dai cambiamenti nascosti. Grazie per la risposta. –

-2

non l'ho fatto prima. Ma la man-page su cherry-pick dice che funziona solo su commit.

Given one or more existing commits, apply the change each one introduces, 
    recording a new commit for each. This requires your working tree to be 
    clean (no modifications from the HEAD commit). 

Stashing non è un commit e non sposta HEAD. Quindi, questo non può essere fatto [questa è solo un'ipotesi però]

+1

In realtà, non solo è un commit un commit, è diverso. Ma spesso non vengono mostrati dagli strumenti di registrazione. Vedi la mia risposta. –

Problemi correlati