Rebasing local git branches on the new repo

Jonathan Wakely
Mon Jan 13 10:26:00 GMT 2020

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

      # 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!

More information about the Gcc mailing list