2013-02-07 61 views
2

支我试图切断库的历史的一部分,所以我 可以在this article描述 与git replace嫁接它放回仓库的一个分支。衍合已经从

在文章中所描述的情况和我的 存储库,我的主分支已经存在部门之间的主要区别。我会 想保持这些分支及其分支点 等同的布局我已经切掉了历史之后。

我的历史大约是这样的

cut here 
     | 
     v 
o--o--o--o--o--o--o master 
      \ \ \ 
      \ \ o--o A 
       \ o--o--o B 
       o--o--o C 

有关老爷的没有分支前的“切这里”承诺。

我想实现的是:

o--o--o history 

initial tree at cut 
     | 
     v 
     o--o--o--o--o master 
       \ \ \ 
       \ \ o--o A 
       \ o--o--o B 
        o--o--o C 

这意味着它是不够的,只是变基在 初始树主,但我还需要重播他们的 相当于新现有的所有分支在主人变身后承诺。我不想只是 重播在新主机上的所有分支,因为这将可能 有冲突。

是否有任何智能,希望自动的方式做到这一点?

+0

我不太明白为什么你需要修改的历史。您可以将这些提交应用到主控制器上,而不会切断任何东西,并且可以解决您的重放问题。 –

+0

@MaxLeske你的意思是在分支机构的提交?如上所述:我相信这会导致冲突,并且有太多的分支机构可以手动解决这些冲突,并且其中一些还很旧。 – pmr

+0

嗯,我真的不明白你为什么会想要做这样的事情(甚至在文章中给出不说服我的理由,你可以只刚刚'克隆--depth = 1')。尽管如此,你是否也可以在这种情况下使用'replace'呢?简单地用“伪提交”替换“cut here”提交。那么你的历史将会丢失(对于这个存储库),但你不需要做任何重新布局/重放。 –

回答

1

这些命令将有你正在寻找的结果是:

git checkout --orphan temp-branch CUT–COMMIT 
git commit // This will create your new initial commit 
git rev-parse HEAD // To get the SHA of this commit 
git replace CUT-COMMIT NEW-COMMIT 
git filter-branch -- --all 

如果您有关于如何以及为什么这个作品,觉得树发表评论的任何问题。在你做这样的事情之前,你可能想备份你的回购。

filter-branch docu

注:此命令荣誉的.git /信息/移植和git的/裁判/替换/。如果 您有任何定义的移植或替换参考,运行此命令 将使它们永久。

+0

我可以跟随发生的事情,包括'git replace'。但我不明白过滤器分支在这里做什么以及它为什么起作用。 – pmr

+0

'filter-branch'重写你的提交历史记录,所以它实际上包含你用'replace'改变的内容。如果这是有道理的。 – Chronial