На основі відповіді @ kevin-hakanson я написав цей маленький скрипт, щоб полегшити цей процес. Він додасть репо-вихідний потік, якщо він ще не існує (запит на отримання URL-адреси), а потім запросить як назву нової гілки, яку слід створити, так і тег / SHA зобов’язання вибрати вишню на цю гілку. Він перевіряє, на якій філії чи зобов’язанні ви зараз перебуваєте, а потім приховує будь-які зміни, щоб ви могли перевірити нову гілку. Стратегія злиття стримує зміни від вишневого комітету. Після натискання нової гілки на origin
(припускається, що це назва вашого віддаленого репо), гілка чи фіксація, на якій ви були раніше, перевіряються знову, і ваші попередні зміни вискакують із сховища.
if ! git remote | grep -q upstream; then
read -p "Upstream git repo URL: " upstream
git remote add upstream $upstream
git remote update
fi
read -p "Feature branch name: " feature_branch
# note: giving "master" is the same as giving the SHA it points to
read -p "SHA of commit to put on branch: " sha
current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" == "HEAD" ]; then
# detached HEAD; just get the commit SHA
current_branch=$(git rev-parse --short HEAD)
fi
git stash
git checkout -b $feature_branch upstream/master
git cherry-pick --strategy=recursive -X theirs $sha
git push origin $feature_branch
git checkout $current_branch
git stash pop
(Це спрацювало для мене в декількох простих тестах, але я не баш програміст чи експерт з git, тому дайте мені знати, якщо є випадки, які я пропустив, які могли б бути автоматизовані краще!)