2015-06-23 6 views
7

Modifica: ho aggiunto alcune informazioni che ritenevo non necessarie, ma non lo sono. Ho due rami, A e B. Dopo aver effettuato tre impegna in A che cambia file.c voglio loro cherry-pick in B, c'è anche un file.h che è stato cambiato in A ~ 1Perché questa selezione di ciliegie risulta in un confitto di unione

> git cherry-pick A~2 
Success 
> git cherry-pick A~1 
error: could not apply 81e0723... 
hint: after resolving the conflicts, mark the corrected paths 
hint: with 'git add <paths>' or 'git rm <paths>' 
hint: and commit the result with 'git commit' 
> git status 
You are currently cherry-picking commit 81e0723. 
Unmerged paths: 
(use "git add <file>..." to mark resolution) 

    both modified: some/unrelated/file.txt 
    both modified: file.c 

Ora guardando alcune/non correlate/file.txt contiene le modifiche a file.h da qualche parte nel mezzo. Quindi questo sembra un bug in git. Quindi ora annullo manualmente le modifiche alcune/non correlate/file.txt e le aggiungo a file.h.

+0

Per il file non correlato, quali modifiche mostra? –

+0

Potresti disegnare un grafico di commit della tua situazione? Ho la sensazione che un 'rebase 'potrebbe fare lo stesso molto più facilmente. –

+0

Ho risolto il problema e scriverò una risposta dettagliata entro oggi/domani. – crunsher

risposta

0

Il cherry picking non è diverso dall'applicazione di un set di patch in ordine (con il vantaggio di ottenere messaggi di commit precedenti). Ciò si traduce necessariamente in nuovi blob - che è possibile verificare notando che egli commette sha's sono diversi.

Quando arriva il tempo di unione, git ora pensa che stia guardando una cronologia diversa, perché tecnicamente lo è, e quindi un conflitto di unione.

1

E 'possibile il cherry-pick sta cambiando una funzione che era stata anche cambiato in precedenza nella storia s' B, in modo che i cambiamenti specificamente in A~1 sono le linee che già sembrava diverso da quello che c'è nella versione B e git non può vedere dove nel B si applicano le modifiche del cherry-pick.

È anche possibile che il contesto che git trova per le modifiche abbia due gemelli malvagi in agguato altrove nel codice (ad esempio, più righe con nient'altro che parentesi di chiusura standalone) e altre modifiche hanno inserito il vero originale corrispondente nel codice abbastanza lontano da dove era in A~1^ che la caccia per il contesto in B trova invece qualcos'altro. Il manuale suggerisce di interrompere la scelta e riprovare con git cherry-pick -Xpatience potrebbe essere sufficiente per evitare problemi con quelli, che trascorrono una quantità di tempo ordinariamente irragionevole cercando di evitare di perdersi in un mare di parentesi graffe. Here's probably a good place to start if you want details on how that really works.

Problemi correlati