Git子树:将子树移动到另一个目录并拉取它

Git子树:将子树移动到另一个目录并拉取它,git,git-subtree,Git,Git Subtree,假设我创建了这样一个子树: git subtree --add --prefix=subdir <path_to_remote> <remote_branch> --squash 吉特说: Can't squash-merge: 'dir2/subdir' was never added. 如何正确执行此操作?git subtree命令了解您的子树,因为当您添加子树时,它会在第一次提交时存储名称: Add 'subdir/' from commit 'c7fbc973

假设我创建了这样一个子树:

git subtree --add --prefix=subdir <path_to_remote> <remote_branch> --squash
吉特说:

Can't squash-merge: 'dir2/subdir' was never added.

如何正确执行此操作?

git subtree命令了解您的子树,因为当您添加子树时,它会在第一次提交时存储名称:

Add 'subdir/' from commit 'c7fbc973614eced220dcef1663d43dad90676e00'

git-subtree-dir: subdir
git-subtree-mainline: c166dc69165f6678d3c409df344c4ed9577a2e11
git-subtree-split: c7fbc973614eced220dcef1663d43dad90676e00
git subtree pull
使用
--squash
选项查找包含
git subtree dir
的提交,以从远程存储库中查找最近的提交,从而找到应用和挤压所有提交的起点

在许多情况下,
git子树拆分--rejoin
操作将成功:

$ git subtree split --rejoin --prefix=dir2/subdir HEAD
Merge made by the 'ours' strategy.
25070c483647f8136655d0e0c6c3d62f469177aa
结果提交如下所示:

Split 'dir2/subdir/' into commit '25070c483647f8136655d0e0c6c3d62f469177aa'

git-subtree-dir: dir2/subdir
git-subtree-mainline: 59cc3c770e78dbc30bdfe36a6b4e14ce83b38f6c
git-subtree-split: 25070c483647f8136655d0e0c6c3d62f469177aa
将找到此提交,并且在大多数情况下,下一个
git子树拉取--squash
将成功。请注意,有时子树操作会失败,并在回购协议的工作副本中留下子树分支。确保删除所有剩余的临时分支,以便从头开始


有时上面的操作并不成功,但我从未找到原因。在这些情况下,您可以重新设置添加子树的提交的基础,并通过修改提交消息手动更改目录名。不过,这次行动会为其他所有人破坏你的整个历史。

谢谢你,这对我很有效!因为您说过git子树只在提交消息中查找文本,所以我尝试添加必要的文本以使用rename进行提交,但正如您所说的,在我的工作副本中以子树的一个分支结束。
Split 'dir2/subdir/' into commit '25070c483647f8136655d0e0c6c3d62f469177aa'

git-subtree-dir: dir2/subdir
git-subtree-mainline: 59cc3c770e78dbc30bdfe36a6b4e14ce83b38f6c
git-subtree-split: 25070c483647f8136655d0e0c6c3d62f469177aa