git“rebase”只有少数来自外部回购的提交?

时间:2013-10-24 07:58:30

标签: git

说我有一个回购X:

<a very long history>-A-B-C-D-E

另一个人有回购Y:

<another very long history>-a-b-c-d-e-f-g-h-...

我想“重新定位”c-d到我的回购并获得:

<a very long history>-A-B-C-D-E-c'-d'

其中c'是E加差异(b..c)与完全相同的提交消息,作者日期,作者姓名和作者电子邮件与c,而d'是c'加上diff(c..d)和相同信息与d。

我想实现这一点而不首先从repo Y获取完整的<another very long history>-a-b-c-d-e分支。有插图吗?

3 个答案:

答案 0 :(得分:2)

确定:请抓取--depth=3,这样您只能提交bcd

你甚至不需要为这么简单的事情添加一个遥控器,更不用说克隆了。只是做

git fetch --depth=3 u://r/l branch
git cherry-pick FETCH_HEAD~2..FETCH_HEAD

hvd points out执行深度限制提取会将您的存储库标记为浅,这将禁用从中获取或克隆。由于您实际上并未发布浅层历史记录(对它们的唯一引用是FETCH_HEAD临时),您可以使用

删除该文件
rm .git/shallow    # safe when no shallow histories are published

答案 1 :(得分:0)

在没有获取其他存储库的历史记录的情况下,除了要求其他人通过邮件发送补丁之外,我看不到另一种解决方案。

请注意,如果她/他通过邮件发送,她/他仍然是提交的作者,但您是提交者!

答案 2 :(得分:0)

需要提取(git fetch --all),但您可以在远程引用上进行修改。

假设您想在Y repo的分支“master”上使用rebase(Y是您使用git remote add Y http://url/to/Y/repo设置的名称):

git rebase Y/master