4

将仓库下某个模块复制到新仓库并保留提交记录(非子库) - 小鸣Cycling

 1 year ago
source link: https://www.cnblogs.com/52liming/p/17390829.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

将仓库下某个模块复制到新仓库并保留提交记录(非子库)

在Git中,有时候我们需要将一个仓库中的某个模块复制到另一个仓库中,并且还需要保留提交记录。这个时候我们可以使用Git subtree命令来实现。
例如:将本地某个仓库中的design-pattern文件夹下的所有文件拿出来作为一个新仓库

以下是具体操作步骤:

  1. 进入旧仓库中,使用以下命令将需要复制的模块分离出来,创建一个新分支:
git subtree split --prefix=design-pattern -b dp

这个命令会在当前仓库中创建一个名为dp的新分支,并将design-pattern模块的提交记录复制到这个分支中。

  1. 切换到dp分支,使用以下命令添加一个新的远程仓库:
git remote add dp_orign [email protected]:forxiaoming/design-pattern.git

这个命令会将一个名为dp_orign的远程仓库添加到当前仓库中。

  1. 将dp分支推送到新的远程仓库中:
git push dp_orign dp

这个命令会将dp分支推送到dp_orign远程仓库中。

接下来只需要在新仓库中将 dp分支合并到主分支即可

  1. 进入新仓库中,使用以下命令拉取新的提交记录:
git pull
#From gitee.com:forxiaoming/design-pattern
# * [new branch]      dp         -> origin/dp

这个命令会拉取dp分支中的提交记录到新仓库中。

  1. 将本地分支与远程分支同步:
git fetch origin

这个命令会将远程分支的最新提交记录拉取到本地。

  1. 切换到dp分支:
git branch
# * master

git branch  -r
#  origin/HEAD -> origin/master
#  origin/dp
#  origin/master

git checkout dp
  1. 这时可以看到 dp 分支下有之前旧仓库推送过来的文件
ls
#README.md
# ...
  1. 切换回主分支:
git checkout master
  1. 将dp分支合并到主分支中:
git merge --allow-unrelated-histories dp

这个命令会将dp分支的提交记录合并到主分支中。

在使用 git merge 命令合并两个分支时,如果两个分支的提交记录没有共同的祖先,即它们的提交历史没有交集,那么 Git 会认为这两个分支是不相关的,不能直接合并。这时候会出现以下错误提示:

fatal: refusing to merge unrelated histories

为了在这种情况下也能够合并分支,需要使用 --allow-unrelated-histories 参数。这个参数的作用是允许合并两个没有共同祖先的分支,即使 Git 认为它们是不相关的。

  1. 推送到远程仓库:
git push
  1. 删除本地dp分支:
git branch -d dp
  1. 删除远程dp分支:
git push origin --delete dp

这样就完成了将一个仓库中的某个模块复制到另一个仓库中,并且保留了提交记录的操作。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK