首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用git-subtree转到特定的提交?

如何使用git-subtree转到特定的提交?
EN

Stack Overflow用户
提问于 2012-10-20 00:10:16
回答 1查看 6.4K关注 0票数 11

我使用的是Avery Pennarun的git-subtree,它是git的扩展。

如何使用git子树从子存储库中挑选一个提交到我的主存储库中?另外,在我已经对该前缀执行了git子树拉取之后,我如何转到子存储库历史中的特定提交?

我主要是在squash commits模式下运行它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 09:08:19

如何转到子存储库历史记录中的特定提交?

如果你已经挤压了提交,那么就没有办法了,因为挤压会丢失不同的提交。

否则,使用未压缩的子树,您可以导航到子树的任何提交,其散列与创建子树的原始存储库中的散列相同。

git subtree (没有挤压)实际上将来自外部存储库的所有相关提交作为当前存储库中的一个独立树添加到您的存储库中。在执行git subtree add时,您可以注意到添加了几次提交(来自外部存储库的所有原始提交)和最后一次合并提交,该提交将内容从该子树移动到使用--prefix选项指定的给定目录。简而言之,它从另一个不相关的存储库中签出一个分支,然后通过将所有内容移动到给定子文件夹中,将其合并到当前分支中。

所有这一切意味着你可以使用外部存储库的历史,你可以像这样签出它,记住,由于是一个完全不同的树,这个签出可能会修改你工作区的所有内容,这在大型项目中可能会很长。

这将我们转移到第二个问题:

如何使用git子树从子存储库中挑选一个提交到我的主存储库中?

似乎目前还没有git subtree本身支持的"cherrypicking“。但是,考虑到以上所有的含义,可以完成以下工作。

代码语言:javascript
复制
# 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操作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12978260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档