我有另一个组织的存储库的一个分支。我在 repo 中的最新标签,它不是头部,我已经从该标签创建了一个永远不会被推送到上游的分支。这就是为什么我认为分支是私有的。
我已经对我的私人分支做出了承诺,并在我的生产环境中使用了该代码。当对上游存储库进行新标记时,我希望能够提取他们的更改。
但是,我希望始终将我的提交保持在最后一个标签之上的整洁堆栈中。那时我不想合并,因为我的提交最终会在历史上很久很久,我希望看到它们就在最前面,这样当我在我的存储库上使用某些工具时,我可以轻松地使用它们。
所以真的,我想要一个“浮动”分支,当我将上游更改带到我的存储库时,我可以移植到任意点。
[编辑] 但是,我不相信我可以使用变基,因为这是一个历史重写操作。你看,我在两台机器上使用我的存储库,我的开发和生产。我在开发机器上提交,推送到 github,然后拉到生产环境。所有这些都与我最初派生的上游存储库的更改无关。
我对移植、摘樱桃或任何其他可能适合的工具并不完全清楚。不管它是什么工具,我认为它不应该重写历史。从我的阅读中,我看到在 push 时重写 repo 历史是一个禁忌。所以我不确定我应该使用什么命令来移植一个分支而不重写历史。
如果我使用的是 mercurial,我可能会考虑使用版本控制的 mq。我不知道 git 的类似解决方案是否有,或者是否有另一种更适合 git 的工具。
[编辑]
在评估了我在这里得到的回复后,我最终确定挑选樱桃是正确的答案。在所有情况下,rebase 都会删除历史记录,并且由于这是一个共享存储库,因此删除历史记录是不可接受的,至少根据我读过的每个来源都是如此。
然而,Cherry-picking 会将提交复制到我的工作树,而不会将其从其原始位置删除。所以我可以将我的更改副本放在最新标签的顶部,并将它们整齐地堆放在一起。
作为记录,我还尝试使用 Mercurial 执行此操作,方法是使用 hg-git 扩展,它允许您使用 hg 克隆 git 存储库。这有利有弊。最大的缺点是,我用完后,它无法推动。hg-git 在那之前一直工作得很愉快,然后告诉你它不支持 hg 1.9。假的,至少可以这么说。另一个缺点是克隆和提取大量更改非常慢。但是,mq 和 TortoiseHg 的合并冲突解决工具是对 git cherry-pick 和 Smartgit 的合并冲突解决的巨大改进。我希望 hg-git 可以工作。
我想最后,“浮动”对于我的更改分支来说并不是一个很好的描述,因为结果是复制它而不是移动它。抱歉我的描述可能很糟糕,我仍在弄清楚这些选项到底是什么。谢谢您的帮助。