git cherry-pick y rebase falla

Tengo los siguientes commits en la historia de mi twig de tema:

( atajo de git lola descrito aquí )

 jochen@autolaptop4:~/projects/infoodle$ git lola * 0c61616 (refs/stash) WIP on receipt_preview_sprint_to_finish: 3678770 progress |\ | * 332dc8a index on receipt_preview_sprint_to_finish: 3678770 progress |/ * 3678770 (HEAD -> receipt_preview_sprint_to_finish, origin/receipt_preview, receipt_preview, integration) progress * ed2ca95 Merge branch 'receipt_preview' of bitbucket.org:richinnz/infoodle-web into receipt_preview |\ | * 0743777 preview stuff | * 03a2279 be able to ahndle both rebatable and non-rebatable | * 1ff3d6c better sample number for preview of receipts | * 0a0f3ed handle missing {tax receipt} replacement | * 0ce35c9 remove language files, should not be in git | * 5cc2b61 identify first key of transaction detail correctly to get data out of transaction record | * def1132 sort out preview spinner | * 5622f85 typo when pasting code from master * | 30ef79c (origin/receipt_search, receipt_search) merge transactiontranslator back into receiptconfigurator * | 367685c progress transferring sql into configurator * | 84c71b1 Merge remote-tracking branch 'origin/receipt_search' into receipt_search |\ \ | * | 149e5f0 Progress on receipt screen search/ sort/ detail * | | e927458 processing receiptstodo query into receiptList class, process SQL where parts into ReceiptConfigurator * | | 80c7c06 list loaded from ajax complete * | | 99b6ed8 only use global.min when not in debug mode * | | bf15181 rename * | | 43fd17a re-indent * | | 57e38a0 re-indent * | | c4e7588 save work | |/ |/| * | 867c918 remove confusing commented out stuff * | fec8c04 text tweak in phpdoc |/ * 75a78ce fix mismatch of function parameter typing after merge 

Básicamente, he fusionado accidentalmente origen / recibo_search y tuvimos un cambio de plan con respecto a la finalización de esta twig de características.

Quiero comenzar ahora con commit 75a78ce (en la parte inferior) y aplicar

 0743777 preview stuff 03a2279 be able to ahndle both rebatable and non-rebatable 1ff3d6c better sample number for preview of receipts 0a0f3ed handle missing {tax receipt} replacement 0ce35c9 remove language files, should not be in git 5cc2b61 identify first key of transaction detail correctly to get data out of transaction record def1132 sort out preview spinner 867c918 remove confusing commented out stuff fec8c04 text tweak in phpdoc 

en order inverso a una nueva twig.

1) He intentado con git cherry-pick:

 git checkout 75a78ce git checkout -b receipt_preview_sprint_to_finish git cherry-pick fec8c04..0743777 

Esto falla al aplicar el segundo compromiso:

 On branch receipt_preview_sprint_to_finish You are currently cherry-picking commit 867c918. (fix conflicts and run "git cherry-pick --continue") (use "git cherry-pick --abort" to cancel the cherry-pick operation) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: code/classes/class.receipting.php 

No entiendo por qué habría un conflicto.

2) Luego intenté rebase:

 git branch -f integration 0743777 git rebase --onto receipt_preview_sprint_to_finish fec8c04~1 integration First, rewinding head to replay your work on top of it... Fast-forwarded integration to receipt_preview_sprint_to_finish. jochen@autolaptop4:~/projects/infoodle$ git log commit 3678770d92b2fd00797d2cda2875c090fc701a1e Author: Jochen Daum <jd@automatem.co.nz> Date: Thu Mar 23 10:48:42 2017 +1300 progress commit ed2ca95096690c4c419ef491ad65c3c5020120e5 Merge: 30ef79c 0743777 Author: Jochen Daum <jd@automatem.co.nz> Date: Thu Mar 23 08:26:23 2017 +1300 Merge branch 'receipt_preview' of bitbucket.org:richinnz/infoodle-web into receipt_preview # Conflicts: # code/ajax/accountcode_functions.php # code/ajax/subinclude/person.php # code/styles/ennz/admin_donationreceipts.tpl.php # code/styles/ennz/header.tpl 

Pero estos 2 compromisos que específicamente no quería.

¿Qué estoy haciendo mal?

El problema con el git cherry-pick es simple:

Quiero comenzar ahora con commit 75a78ce (al final) y aplicar [commits comenzando con, e incluyendo , fec8c04 , así que ejecuté]

 git cherry-pick fec8c04..0743777 

La notación X..Y en Git significa "todos los commits alcanzables desde Y , excluyendo todos los commits accesibles desde X ". Esto excluye a X mismo. Es una reminiscencia de intervalos semiabiertos en matemáticas, donde [3..5] significa 3, 4 y 5, pero (3,5) significa 4 y 5 solamente, o [3, 5] significa 3 y 4 solamente. (Estas se escriben de otras maneras, como] 3, 5] en algunas annotations, y las confirmaciones no son realmente lineales de esta manera; en realidad estamos haciendo restas en lugar de intervalos, pero la idea aquí es actuar como un recordatorio de que X..Y nunca incluye cometer X .)

Por lo tanto, lo que necesitas es:

 git cherry-pick 75a78ce..0743777 

o:

 git cherry-pick fec8c04^..0743777 

para include commit fec8c04 .

Digno de notar también es que esto no está del todo bien:

 git checkout 75a78ce git branch -b receipt_preview_sprint_to_finish 

El segundo command debe ser git checkout -b , no git branch -b . Pero la git branch -b te daría un error, así que supongo que usaste git checkout -b . 🙂

(El método git rebase no va a funcionar bien, ya que seleccionará demasiados commits para copyr en una secuencia lineal.)