git - 将一个 Git 存储库移动到另一个带有分支的子文件夹中

标签 git merge

我有一个 Git 仓库 Old我想移动到子文件夹 sub现有 Git 存储库的 New .我有两个分支,masterfeature , 在 Old 内我也想转过来; Old\master应该 merge 到 New\masterNew 中应该有一个新分支称为 old-feature .

我不太关心干净的历史;我目前的流程是做一个 git mvOld在进行迁移之前,这对我来说很好。如果可能的话,我更愿意避免重写历史。

我当前的迁移步骤如下(在 New 存储库中):

  • git remote add -f old ...
  • 新建old-feature来自 master 的分支.
  • 创建本地feature来自 old/feature 的分支.
  • merge 分支 feature -> old-feature .
  • merge 分支 old/master -> master .
  • 推送两个分支。

虽然这行得通,但我发现如果我从 old-feature merge 至 master ,Git 不了解历史(我的意思是我搞砸了历史)并将每个文件视为 merge 冲突。如何进行适当的迁移以维护分支关系?

最佳答案

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

PowerShell

> 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

记录结果

*   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.

我不确定您要“维持分支关系”是什么意思。对于我示例中说明的历史,您想更改什么?

关于git - 将一个 Git 存储库移动到另一个带有分支的子文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592683/

相关文章:

ios - Swift:类型 'ViewController' 不符合协议(protocol) 'UIPageViewControllerDataSource'

xcode - 为什么Xcode 5.1.1的项目格式从Plist转为XML?

python - Pandas 合并索引不起作用

algorithm - F# 错误和归并排序

java - 如何在Java中连接/合并两个视频到一个新的视频文件中?

git - 说它提交了,但在 GitHub 中它没有出现

git - 为什么 bitbucket 不自动更新我的 pull 请求?

git - Travis-CI API 中讨论的 "repository ID"是什么?

python - 有没有一种方法可以将某些值的数据从另一个表插入到一个表中?

r - 合并两个 data.frames 并替换