用git重写很旧的提交

问题描述 投票:1回答:1

我必须在git储存库中重写非常旧的提交,并且不确定是否可能。通过重写,我的意思是压榨并重新措辞一些提交。还值得一提的是,存储库中有很多合并提交,大多数应该保留。

所以,假设我的仓库是A <- B <- C <- D <- E <- ... X <- Y <- Z,我必须压缩AB并改写CD

好,我创建了一个新的分支tmp,并完成了以下操作:

  1. 我的tmp分支引用了D提交。
  2. 我对要求的提交做了一个壁球和改写。
  3. 现在tmp分支中有这样的内容-A' <- C' <- D'。顺便说一句,rebase忽略D之前的所有合并提交,但必须保留D之后的所有合并提交,实际上是可以的。
  4. [现在我想以某种方式合并我的tmp分支和master分支以得到如下内容:A' <- C' <- D' <- E <- ... <- X <- Y <- Z,所有合并提交都从E开始。对我来说,似乎更改了提交E的父级,但不确定是否可以这样做。可能还有其他一些方法可以实现我所需要的。

UPDATE

我试图在git replace D D'分支上创建一个master,并且在此git filter-branch -- tmp之后,它几乎可以正常工作。不幸的是,当我在D移到最底部之后执行替换命令时,历史记录看起来像A <- E <- F <- A' <- C' <- D' <- G <- ... <- X <- Y <- Z,这对我来说很奇怪,但是当我尝试git replace C D'时,除了重复的D和[C0 ]提交。不知道这是否是一种好方法,但就我而言,这看起来像是唯一的方法。

对不起,如果造成混淆,我会尝试澄清是否不清楚。

我必须在git储存库中重写非常旧的提交,并且不确定是否可能。通过重写,我的意思是压榨并重新措辞一些提交。还值得一提的是,有很多...

git git-rebase git-rewrite-history
1个回答
0
投票

您可以将D'git filter-branch一起使用来“重设父级” parent-filter。这些文档(包括仅做您想做的事情的示例)在这里:E

© www.soinside.com 2019 - 2024. All rights reserved.