Git выбор вишни - диапазон коммитов и исключить некоторые из них
Обычно я использую следующую команду git для cherryppick диапазона gerrits..no, как я могу исключить пару gerrits между ними. может ли изменяться команда ниже или есть там, где мы можем выбрать диапазон gerrits и исключаем те, которые нам нужны.
git cherrypick fromgerritSHA1..togerritSHA1
Ответы
Ответ 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'