Re: Merging changes from branches where file paths have changed
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Apr 14, 2012, 19:21 UTC
- Message-ID
- <4F89CE36.4000607@kdbg.org>
- In-Reply-To
- <CA+39Oz7m1hGrTEdpSAjBP3EDFSVyKdc6T9CORcwQkjuEbvD4Ug@mail.gmail.com>
Am 14.04.2012 15:15, schrieb Thomas Adam:
Show 16 quoted lines
> The commits though coming from "git log" in RepoA touch files in > distrib/build/sources/coretree/tree, yet the files to which I want the > changes for in RepoB are not in "distrib/build/sources/coretree/tree" > -- there all in "./" at the top-level directory for RepoB. The files > in both once shared the same history -- it's just that now the > locations of those files in RepoB which have changed. > > I want to cherry-pick the commits I obtained from the "git log" > command in RepoA, and have them contained in RepoB. So I thought > something like this would work: > > [ In RepoB.... ]: > % git remote add repoA file:///path/to/repoA/ > % git fetch repoA > % git checkout specific/branch > % git cherry-pick $SOME_COMMIT_FROM_REPOA
You have these histories
A--o--B--C--o--o--D--o--E <- RepoA
A'----B'-C' <- RepoB
and you want to cherry-pick D and E to RepoB. Right?
I suggest that you install a graft in RepoB, then cherry-pick D and E:
echo $(git rev-parse C' C) >> .git/info/grafts git cherry-pick D git cherry-pick E
Then it will look as if everything outside the directory was removed, and everything else was moved from the directory to the root with 100% similarity, which makes the merge process easy. (This works only if there are no files with the same names in C's and C''s root; a Makefile in each would pose a problem.)
(Remove the graft when you're done.)
-- Hannes