commits - how to do cherry pick in git
git cherry pick-rango de confirmaciones y excluye algunas en el medio (3)
Normalmente utilizo el siguiente comando git para seleccionar una serie de gerrits ... no puedo excluir un par de gerrits entre ellos ... ¿se puede modificar el siguiente comando o hay uno donde podemos elegir un rango de gerrits y excluir los que tenemos? querer..
git cherrypick fromgerritSHA1..togerritSHA1
No estoy seguro si puede retirar confirmaciones individuales de un rango abcdef..123456
. La sintaxis del rango de Git se explica en los documentos para gitrevisions , y no parece que funcione de esa manera. Aún así, hay otra forma de obtener lo que desea utilizando solo los valores hash de rango y los que excluirá.
Suponiendo que los dos fromgerritSHA1..togerritSHA1
hash en el rango 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 rango fromgerritSHA1..togerritSHA1
, una línea a la vez. --reverse
es necesario para enumerar los hashes en el orden correcto para el cherry-pick.
grep -vE ''skiphash1|skiphash2''
elimina los dos hashes que no desea de la lista. Puede agregar más hashes para omitir, simplemente sepárelos con |
.
Finalmente, la lista de solo los hash 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 intento 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''
Puede especificar múltiples rangos:
git cherry-pick A..B C..D E..F
o incluso confirmaciones específicas:
git cherry-pick A B C D E F
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 registro, ya que git cherry-pick
quiere ver los commits en el orden opuesto a lo que produce el git log
(también podría usar git log --reverse ...
).