Git 重新设置已从中分支的分支的基址
我试图切断存储库历史的一部分,因此 可以使用所述的Git 重新设置已从中分支的分支的基址,git,version-control,git-rebase,Git,Version Control,Git Rebase,我试图切断存储库历史的一部分,因此 可以使用所述的git replace将其移植回存储库 在 文章中描述的案例与我的 存储库是,我的主分支具有现有分支。我会的 希望保留这些分支及其分支点的布局 在我删去历史之后,就相当于 我的历史大概是这样的 cut here | v o--o--o--o--o--o--o master \ \ \ \ \ o--o A \ o--o--o
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
这意味着仅仅在主机上重新设置master的基址是不够的
初始树,但我还需要重播其上的所有现有分支
在主服务器的重新基址后等效的新提交。我不想只是
重播新主机上的所有分支,因为这可能会
有冲突
是否有任何智能且希望自动的方法可以做到这一点?这些命令将产生您想要的结果:
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
如果您对如何以及为什么这样做有任何疑问,请留言。在做类似的事情之前,你可能想备份你的回购协议
来自:
注意:此命令支持.git/info/grafts和.git/refs/replace/。如果
运行此命令可以定义任何移植或替换参照
将使它们永久化
我不太明白你为什么需要修改历史记录。您可以在master上应用这些提交,而无需删除任何内容。瞧,您的重放问题将得到解决。@MaxLeske您是说分支中的提交吗?如前所述:我确信这会导致冲突,而且手动解决这些问题的分支太多了,其中一些分支已经很旧了。我真的不明白为什么您会想做这样的事情(即使文章中给出的理由也不能说服我,您可以只做
clone--depth=1
)。然而,您不能在这种情况下也使用replace
?只需用一个伪提交替换“cuthere”提交。您的历史记录将丢失(对于该存储库),但您不必进行任何重定基/重放。@MaxLeske具有深度的克隆将创建一个不可用的存储库,据我对手册页的了解。但也许我错了。如果我用你的替换技巧,我能用历史分支的尖端再次替换吗?是的,你是对的。如果您确实希望使用存储库执行高级操作,并将其克隆到深度太浅的位置,那么您将无法推送(尽管它在不同的情况下可以工作)。如手册页所述,替换只是引用。因此,是的,您可以随时替换提交,如果您选择删除替换,则最终将返回原始存储库。我可以跟踪到发生的情况,包括git replace
。但是我不明白筛选器分支在这里做什么以及它为什么工作。filter branch
重写您的提交历史记录,因此它实际上包含您使用replace
更改的内容。如果这有道理的话。