I have started using Git in the middle of my project, where the first two commits are just some initial settings (.gitignore and .gitattributes), and the third commit M2 adds the content of the SVN trunk:
I1 -- I2 -- M2 -- N -- .. -- Z
I have imported the SVN history in a branch named svn, where M1 is the SVN trunk (with the same content as M2, except .gitignore and .gitattributes):
A -- B -- ... -- K -- L -- M1
Q: What is the best approach in merging both branches?
I could merge M1 and M2 into M3, and then rebase, but I don't know how to delete the I1 and I2 commits and if I can safely remove the M3 commit (I have found some advices to preserve the merge commits, but in this case M3 it's not necessary anymore).
A -- B -- ... -- K -- L -- M1
\
M3 -- N' -- .. -- Z'
/
I1 -- I2 -- M2 -- N -- .. -- Z
Another way would be to cherry-pick the N .. Z commits into svn branch by hand, but I would like to avoid this approach.
The most elegant solution would be to rebase the changes introduced by N .. Z commits on top of svn branch, but I didn't found yet the required syntax for two branches without a common ancestor.
git filter-branch
" to rewrite history according to grafts, turning grafted parentage into real parentage. But that rewrites history. – Rebroadcast