Now that I've switched my local git tree to the new repo (by changing the URL for the 'origin' remote, and adding the old one as a 'gcc-old' remote) I've been experimenting with these commands to switch some of the ~400 local branches to be based on the new repo instead of the git-svn mirror.
# The local branch to update branch=foo # The previous upstream for the branch upstream=$(git rev-parse --symbolic-full-name $branch@{u} | sed -n s,^refs/heads,gcc-old,p) # find the last upstream commit in the branch base=$(git merge-base $branch $upstream) # extract its SVN revision svnrev=$(git log -1 $base | sed -n '/git-svn-id:/s/.*@\([[:digit:]]\+\) .*/\1/p') # find equivalent commit in master onto=$(git log --pretty=format:%H --grep="From-SVN: r$svnrev" $branch@{u}) git rebase --onto $onto $upstream $branch Use at your own risk!