У меня есть ветви A и B в Git. Здесь я выбираю изменения из ветви A в ветку B. Для этого я создал тег в ветке A и сделал 10 различных коммитов поверх него. Первый коммит был помечен в ветви A.
Команда Git cherry pick принимает в качестве входных данных хеши коммитов.
Для этого у меня есть список хэшей коммитов (SHA), начинающийся с тега (в ветви A) в такой переменной.
Оформить заказ филиал A
commithash="$(/usr/bin/git log --boundary --pretty=oneline ${tag_name}.. | sed -e 's/- //'| cut -d ' ' -f 1)"
echo $commithash ---gives spaces delimited commit hashes below.
3f899d3eebce23ce6a1efd3b73ea0b328c8cf3e1 2180e9e8a0a73a5313e70317a20360e3314b2568 f001ad3d03b6a4231d370a3b389d6edbd14db73b 66049c094a0780df7a518ba75d677213168e5211 3a6e53426e85f36b8fc3e19586c18d1ee0abf31b 0b2698bf67ea0c29f0e76fe110a0b89ccbfdecd2 8aed2c998dcd38ac5e01be5d1004d7130b1b2458 07a65386ad8883bf5f774541461cce0779d8b0d2 b57d0d1cea1cf8a151f1244c30b8f08eb7583926
Теперь я переключаюсь на ветку B
Для каждого хэша коммита в этой переменной я хочу запустить команду.
git cherry-pick --strategy-option theirs $(for-each-commit-sha)
При выполнении команды она успешна, за исключением нижеприведенного сценария, где она терпит неудачу.
A. если выходные данные для команды cherry pick имеют приведенный ниже вывод, скрипт завершится неудачно, и ни один из файлов не будет выбран вишней.
error: could not apply 34h5432.. adding dev text for cc in file
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'
Ниже выводится:
git status
On branch B
You are currently cherry-picking commit 34h5432...
(fix conflicts and run "git cherry-pick --continue")
(use "git cherry-pick --abort" to cancel the cherry-pick operation)
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by us: cc.txt
В этом сценарии я хочу запустить git add cc.txt или выполнить git add для всего, что упомянуто после «удалено нами:»
git add cc.txt
git commit -m "adding file"
Затем продолжайте выбор вишни для остальных хэшей коммитов в списке до последнего.
Выбор вишни нужно делать с последнего коммита ша до первого. В этом случае начинайте с b57d0d1cea1cf8a151f1244c30b8f08eb7583926
и заканчивайте
3f899d3eebce23ce6a1efd3b73ea0b328c8cf3e1
Как я могу это сделать?
commithash="$(/usr/bin/git log --boundary --pretty=oneline ${tag_name}.. | sed -e 's/- //'| cut -d ' ' -f 1)"