git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Thomas AdamNext: Thomas Adam
Message 2 of 4 in “Merging changes from branches where file paths have changed”
  1. Thomas AdamApr 14, 2012
  2. Johannes SixtApr 14, 2012
  3. Thomas AdamApr 14, 2012
  4. Johannes SixtApr 14, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.