将一个Git repo移动到另一个带分支的子文件夹中

Ste*_*ary 6 git merge

我有一个Git仓库Old,我想进入sub现有Git仓库的子文件夹New.我有两个分支,master并且featureOld其中我也希望转移; Old\master应该只是融入New\master,并且应该有一个新的分支Newold-feature.

我并不过分担心干净的历史; 我目前的进程只是做一个git mvOld做迁移之前,这是我没意见.如果可能的话,我更愿意避免重写历史.

我目前的迁移步骤如下(在New回购中):

  • git remote add -f old ...
  • old-feature从中创建新分支master.
  • feature从中创建本地分支old/feature.
  • 合并分支feature- > old-feature.
  • 合并分支old/master- > master.
  • 推两个分支.

虽然这有效,但我发现以后如果我合并old-featuremaster,Git不理解历史(我的意思是我搞砸的历史)并将每个文件视为合并冲突.如何进行正确的迁移以维护分支关系?

Sha*_*tin 0

虽然这属于长评论而不是答案,但我想向您展示我通过使用两个单独的存储库遵循您的流程所获得的结果,以便我可以询问下面的示例日志为何不令人满意。(注意:我只有一个合并冲突,该冲突与README.md两个存储库中的文件有关。)

电源外壳

> cd Old
> git commit --allow-empty -m "A commit from Old"
> dir -Exclude sub | % { Move-Item $_ sub }
> git add -A; git commit -m "Move all to sub"
> cd ..\New
> git remote add old -f <full-path-to-Old>
> git checkout master
> git checkout -b old-feature
> git branch feature old/feature
> git merge feature
> git log --oneline --graph --all --decorate -20
Run Code Online (Sandbox Code Playgroud)

记录结果

*   4b636e7 (HEAD, master) Merge remote-tracking branch 'old/master'
|\
| * 4aa5741 (old/master) Move all to sub
| * 158c921 Commit from old/master.
| * c258979 Commit from old/master.
| * b00b001 Commit from old/master.
| * b0b582b Commit from old/master.
| * b6487e1 Commit from old/master.
| * 15b676a Commit from old/master.
| * 9db62a7 Commit from old/master.
| * 1ff5856 Commit from old/master.
| | *   f8475cb (old-feature) Merge
| | |\
| |/ /
|/| |
| | * 54e0f30 (old/feature, feature) Commit from old/feature.
| | * 999e6b5 Commit from old/feature.
* | | f0dd795 (origin/master) Commit from new/master.
Run Code Online (Sandbox Code Playgroud)

我不知道当你想“维持分支关系”时你的意思是什么。您想对我的示例中所示的历史进行哪些更改?