1. 添加子仓库地址

1
git remote add SubTree-origin http://192.168.50.200:3000/330/SubTree.git  

2. 使用 subtree 添加子树

1
git subtree add -P SubTree SubTree-origin master --squash  

注意:--squash 会把所有提交合并成一条提交,如果使用了此选项,在后续的其他命令也应使用 --squash,以保持提交记录的线性,否则可能会出现分支落后的问题。

3. 从子仓库拉取更新

当子仓库有新的提交时,可以使用以下命令将最新的更改拉取到主仓库中:

1
git subtree pull -P SubTree SubTree-origin master --squash  

说明:

  • git subtree pull:从指定的远程仓库拉取子树的更新。
  • -P SubTree:指定子树的路径。
  • SubTree-origin:远程子仓库的名称。
  • master:子仓库的目标分支。
  • --squash:将所有拉取的提交压缩成一个提交,以保持主仓库的提交历史简洁。

4. 向子仓库推送更改

在对子仓库的代码进行了修改并提交后,可以将这些更改推送回子仓库:

1
git subtree push -P SubTree SubTree-origin master  

说明:

  • git subtree push:将主仓库中子树路径下的更改推送到远程子仓库。
  • -P SubTree:指定子树的路径。
  • SubTree-origin:远程子仓库的名称。
  • master:子仓库的目标分支。

注意:

  • 使用 git subtree push 时通常不需要 --squash,因为推送到子仓库时需要保留完整的提交历史。
  • 确保在推送前已经拉取了最新的子仓库更改,以避免冲突。

5. 更新子仓库地址(如需)

如果子仓库的地址发生变化,可以使用以下命令更新远程仓库的 URL:

1
git remote set-url SubTree-origin http://新的地址/SubTree.git  

说明:

  • git remote set-url:修改远程仓库的 URL。
  • SubTree-origin:远程子仓库的名称。
  • http://新的地址/SubTree.git:新的子仓库地址。

6. 移除子树(如需)

如果需要从主仓库中移除子树,可以使用以下命令:

1
2
3
git subtree split -P SubTree -b split-SubTree  
git push SubTree-origin split-SubTree:master
git remote remove SubTree-origin

说明:

  1. git subtree split -P SubTree -b split-SubTree:将子树路径 SubTree 的历史提取到一个新的分支 split-SubTree
  2. git push SubTree-origin split-SubTree:master:将提取的历史推送到子仓库的 master 分支。
  3. git remote remove SubTree-origin:从主仓库中移除子仓库的远程地址。

该封面图片由Monica Max WestPixabay上发布