[英]How do I go to a specific commit using git-subtree?
我正在使用Avery Pennarun的git-subtree,它是git的扩展。
如何使用git子树将子仓库中的提交樱桃拣选到主仓库中? 另外,在已经对该前缀执行git子树提取之后,如何在子存储库的历史记录中进行特定的提交?
我主要是在南瓜提交模式下运行它。
我如何进入子仓库历史记录中的特定提交?
如果您已压缩提交,则没有办法,因为南瓜会丢失不同的提交。
否则,使用未压缩的子树,您可以导航到该子树的任何提交,该提交的散列与创建子树的原始存储库中的散列相同。
git subtree
(不包含南瓜)实际上将外部存储库中的所有相关提交作为当前回购中的独立树添加到存储库中。 当您git subtree add
您会注意到git subtree add
了多个提交(来自外部存储库的所有原始提交)和最后一个合并提交,该提交将内容从该子树移动到使用--prefix
选项指定的给定目录。 简而言之,它从另一个不相关的存储库中签出一个分支,然后通过将所有内容移动到给定的子文件夹中将其合并到您的当前分支中。
所有这些意味着您可以使用外部存储库的历史记录,您可以像这样签出,请记住,由于是完全不同的树,此签出可能会修改工作空间的所有内容,这在很大程度上项目可能很长。
这将我们移至第二个:
如何使用git子树将子仓库中的提交樱桃拣选到主仓库中?
好像自己的git subtree
当前不支持“ cherrypicking”。 但是,鉴于上述所有含义,可以完成以下工作。
# move yourself to the subtree commit of your choice
git checkout <subtree-hash>
# fetch commits from the subtree repository, to have available the commit you want
# to cherry pick.
git fetch <path-to-remote>
# cherry pick the hash you want
git cherry-pick <cherry-hash>
# move back to your original branch
git checkout <your-branch>
# subtree merge your cherry pick (using the previous HEAD),
# so that it gets moved to the correct location specified by prefix.
git subtree merge --prefix <subtree-prefix> HEAD@{1}
# Since you probably fetched more commits that you needed from
# the remote, you might want to clean those that where not needed
git gc
考虑到这样做之后,如果您尝试将git subtree pull
引入到子树中进行更新,并且其中包括您选择的提交,那么您将以冲突结尾,因为您将在同一位置进行两次更改。
如果您有权访问原始的子树存储库,则另一个更简单的选择是在分支中选择樱桃,然后仅git subtree pull
该特定分支。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.