Подтвердить что ты не робот

Git выбор вишни - диапазон коммитов и исключить некоторые из них

Обычно я использую следующую команду git для cherryppick диапазона gerrits..no, как я могу исключить пару gerrits между ними. может ли изменяться команда ниже или есть там, где мы можем выбрать диапазон gerrits и исключаем те, которые нам нужны.

git cherrypick fromgerritSHA1..togerritSHA1
4b9b3361

Ответ 1

Вы можете указать несколько диапазонов:

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

или даже определенные коммиты:

git cherry-pick A B C D E F

Если у вас много коммитов, которые вы хотите исключить, может быть проще сделать что-то вроде этого (вроде как бедный человек git rebase -i для 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)

Изменить: добавлена ​​рекомендация в журнал tac, так как git cherry-pick хочет видеть коммиты в противоположном порядке от того, что создает git log (также может использовать git log --reverse ...).

Ответ 2

Не уверен, что вы можете вытащить отдельные коммиты из диапазона abcdef..123456. Синтаксис диапазона Git объясняется в документах для gitrevisions, и похоже, что он работает именно так. Тем не менее, есть другой способ получить то, что вы хотите, используя только хэши диапазона и те, которые нужно исключить.

Предполагая, что две хеши в диапазоне fromgerritSHA1..togerritSHA1, которые вам не нужны, это skiphash1 и skiphash2, попробуйте:

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

git rev-list --reverse fromgerritSHA1..togerritSHA1 выводит хеши фиксации в диапазоне fromgerritSHA1..togerritSHA1, по одной строке за раз. --reverse необходим, чтобы перечислить хеши в правильном порядке для вишневого выбора.

grep -vE 'skiphash1|skiphash2' удаляет две хеши, которые вы не хотите из списка. Вы можете добавить больше хэшей, чтобы пропустить, просто отделите их |.

Наконец, список только хешей фиксации передается в git cherry-pick --stdin.

Ответ 3

Если у вас возникли проблемы во время выбора вишни, как показано ниже, попробуйте выбрать начальный хэш раньше, чем была ваша первоначальная попытка.

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'