Brzmi to może chcesz, aby te rewizje na gałęzi innego niż kapitan, a następnie scalić tę gałąź zarówno pana i swoją drugą Branża:
git checkout working-branch
<do some work>
git commit
git checkout master
git merge working-branch
git checkout second-branch
git merge working-branch
To jest dużo, dużo lepiej niż cherry- wybieranie, ponieważ nie wiąże się z powielaniem commitów w historii, pozbywa się problemów związanych z dwukrotnym wybieraniem commitów (których obecnie należy ręcznie unikać) ... i jest po prostu sposobem działania git. Nie wiem, co to jest twoja druga gałąź, ale to, co opisuję, jest zasadniczo powszechnym przepływem pracy polegającym na okresowym łączeniu oddziałów konserwacji i tematów z powrotem do systemu głównego, jak również wszelkich innych odpowiednich zmodyfikowanych wersji lub gałęzi obsługi.
Zdecydowanie zalecam przyjęcie przepływu pracy, gdzie odbywa się to przez scalenie, jak opisano powyżej, ale aby odpowiedzieć na zadane pytanie, jeśli absolutnie musisz pracować nad wzorcem i wyborem typu "wiśnia", możesz napisać mały scenariusz, coś w stylu:
#!/bin/bash
# take two arguments:
# 1. other branch to put commits on
# 2. number of commits to cherry-pick from master
if ! git checkout $1; then
exit
fi
git rev-list --reverse -n $2 master |
while read commit; do
if ! git cherry-pick $commit; then
exit
fi
done
Oczywiście istnieją sposoby na zwiększenie odporności skryptu, np. dodawanie zdolności do wznawiania po wiśniowych wyborach, których łatki nie mają zastosowania poprawnie, ale to jest początek.
Oczywiście możesz sobie poradzić z tym, jak używasz git-rev-list do wyboru zatwierdzeń. Możesz nawet przekazać wszystkie oprócz pierwszego argumentu na listę git-rev, abyś mógł wykonać cherries-pick <branch> -n 5 master
lub cherries-pick <branch> release_tag..master
lub cokolwiek chcesz. Spójrz na jego man page!
Można również użyć git-rebase
jak sugerowano w innym miejscu, ale dlatego, że w rzeczywistości nie chce się przenieść pana, będziesz w końcu robi coś takiego:
git branch master-copy master
git rebase --onto <branch> master~5 master
git checkout <branch>
git merge master-copy
git branch -d master-copy
Bardzo imponujące, dziękuję! –