Давайте предположим имена здесь: sprint
для ветви спринта, и вы попытаетесь отменить все из feature2
ветви.
# next line was my first idea but probably no good
git rev-list $(git merge-base sprint feature2)..feature2
# since we have master as a ref for the merge-base, let's go simpler
git rev-list master..feature2
# or, if feature2 is branched of feature1 :
git rev-list feature1..feature2
выдаст вам список коммитов для возврата.
(Если вы уже удалили feature2
, просто заново создайте его при коммите непосредственно перед слиянием в sprint
, или получите его из reflog)
Затем вы можете связать возвраты без коммитов и просто коммититьоднажды в конце:
git revert -n <commit1>
git revert -n <commit2>
...
git commit -m "Revert of commits 1, 2, 3, ..."
Но я бы не стал автоматизировать процесс дальше, так как вам, вероятно, придется решать конфликты на этом пути.