git 从一个分支合并到另一个分支
git merge from one fork to another
我分叉了一个原始 git 存储库 (repo1),它有很多模块(比方说 A、B、C),并对我的分叉中的其中一个模块(假设在 A 中)进行了一些更改( myname/repo1)。到那时,我计划将我的更改从 fork 拉到原始仓库(repo1),原始仓库已经重构,每个模块现在都是一个 git 仓库(repoA、repoB、repoC)。我现在分叉了 repoA,想先从之前的分叉 (myname/repo1 - moduleA) 合并到这个 (myname/repoA)。我该怎么做?
有多种方法可以解决这个问题。您无法合并,因为提交 ID 和文件位置已更改。可能最简单的是将您的更改重新定位到新存储库,然后合并。由于文件名已移动,您也必须应用相同的更改。
第一步是将新存储库引入远程。 git remote add repoA url-to-repo-a
和 git fetch repoA
.
然后您需要应用与创建 repoA 相同的文件名更改到您的分支。这可以通过 git filter-branch
使用 --subdirectory-filter
来完成。查看您的分支后,运行 类似于 git filter-branch --subdirectory-filter moduleA/ master..HEAD
。这将使目录 moduleA/
的内容进入新的根目录。 master..HEAD
会将更改限制在您的分支。为了安全起见,您可以在 运行 设置过滤器之前标记当前分支,以便在过滤器出错时更容易恢复。
您现在应该可以正常合并了。
我分叉了一个原始 git 存储库 (repo1),它有很多模块(比方说 A、B、C),并对我的分叉中的其中一个模块(假设在 A 中)进行了一些更改( myname/repo1)。到那时,我计划将我的更改从 fork 拉到原始仓库(repo1),原始仓库已经重构,每个模块现在都是一个 git 仓库(repoA、repoB、repoC)。我现在分叉了 repoA,想先从之前的分叉 (myname/repo1 - moduleA) 合并到这个 (myname/repoA)。我该怎么做?
有多种方法可以解决这个问题。您无法合并,因为提交 ID 和文件位置已更改。可能最简单的是将您的更改重新定位到新存储库,然后合并。由于文件名已移动,您也必须应用相同的更改。
第一步是将新存储库引入远程。 git remote add repoA url-to-repo-a
和 git fetch repoA
.
然后您需要应用与创建 repoA 相同的文件名更改到您的分支。这可以通过 git filter-branch
使用 --subdirectory-filter
来完成。查看您的分支后,运行 类似于 git filter-branch --subdirectory-filter moduleA/ master..HEAD
。这将使目录 moduleA/
的内容进入新的根目录。 master..HEAD
会将更改限制在您的分支。为了安全起见,您可以在 运行 设置过滤器之前标记当前分支,以便在过滤器出错时更容易恢复。
您现在应该可以正常合并了。