git cherry pick – range de confirmaciones y excluye algunas en el medio

Normalmente utilizo el siguiente command git para seleccionar una serie de gerrits … no puedo excluir un par de gerrits entre ellos … ¿se puede modificar el siguiente command o hay uno donde podemos elegir un range de gerrits y excluir los que tenemos? querer..

git cherrypick fromgerritSHA1..togerritSHA1 

Puede especificar múltiples ranges:

 git cherry-pick A..B C..D E..F 

o incluso confirmaciones específicas:

 git cherry-pick ABCDEF 

Si tiene muchas confirmaciones que desea excluir, podría ser más fácil hacer algo como esto (algo así como la git rebase -i un pobre git rebase -i para git cherry-pick ):

 git log --pretty=oneline A..F | tac > tempfile.txt < edit tempfile.txt to remove the commits you don't want > git cherry-pick $(awk '{print $1}' tempfile.txt) 

Editar: se agregó una recomendación para tac el logging, ya que git cherry-pick quiere ver los commits en el order opuesto a lo que produce el git log (también podría usar git log --reverse ... ).

No estoy seguro si puede retirar confirmaciones individuales de un range abcdef..123456 . La syntax del range de Git se explica en los documentos para gitrevisions , y no parece que funcione de esa manera. Aún así, hay otra forma de get lo que desea utilizando solo los valores hash de range y los que excluir.

Suponiendo que los dos fromgerritSHA1..togerritSHA1 hash en el range fromgerritSHA1..togerritSHA1 que no desea son skiphash1 y skiphash2 , intente:

 $ git rev-list --reverse fromgerritSHA1..togerritSHA1 | grep -vE 'skiphash1|skiphash2' | git cherry-pick --stdin 

git rev-list --reverse fromgerritSHA1..togerritSHA1 imprime los hashes de confirmación en el range fromgerritSHA1..togerritSHA1 , una línea a la vez. --reverse es necesario para enumerar los hashes en el order correcto para el cherry-pick.

grep -vE 'skiphash1|skiphash2' elimina los dos hash que no desea de la list. Puede agregar más hashes para omitir, simplemente sepárelos con | .

Finalmente, la list de solo los hashes de confirmación que desea se pasa a git cherry-pick --stdin .

Si tienes un problema durante la selección de cereza como a continuación, intenta elegir iniciar hash uno antes que tu bash original.

 git cherry-pick a005efa..1ece685 [temp_4454kjerer3233 3520dd4] 3. xxx. 1 file changed, 9 insertions(+) [temp_4454kjerer3233 791cec5] 4. xxx. 3 files changed, 19 insertions(+) [temp_4454kjerer3233 2e95364] 5. xxx. 2 files changed, 21 insertions(+) [temp_4454kjerer3233 59e38b9] 6. xxx. 3 files changed, 61 insertions(+) error: could not apply a3b0c6b... 7. xxx. 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'