将旧的git历史记录合并到初始提交中

乌龙

尽管有多个主题涉及相似的问题,但似乎无法解决Git rebase

我有一个很大的Git回购,并且我想减少提交历史的主要部分。提交图的当前状态如下:

(huge tree of various branching and merging) -> commit_I_want_to_squash_to -> branching off into master and couple of feature branches

我想要的结果是:

commit_I_want_to_squash_to_is_first_in_tree -> branching off into master and couple of feature branches

我想这应该是可行的,因为所有当前分支都使用单个提交作为起点。我尝试过与玩游戏git rebase --squash,但要压缩300多个分支历史记录似乎是一项非常艰巨的任务。应该以某种方式只是在我要首先进行的提交之前“切片”提交树。

罗宾斯特

因此,本质上您想要做的是比某个提交更早地切断历史记录。用Git术语来说,这意味着您想要将该提交从拥有父级重写为没有父级(成为新历史记录的开始提交)。

这可以使用git filter-branch来完成,如下所示:

git filter-branch \
  --parent-filter 'test $GIT_COMMIT = <initial-commit-id> && echo "" || cat' \
  --tag-name-filter cat -- --all

另一种选择是使用嫁接功能,如下所示。请注意,您可以在使用第一个命令后使用git log或图形查看器检查结果历史记录,以验证所需结果是否正确:

echo "<initial-commit-id> " >> info/grafts  # .git/info/grafts in non-bare repo
git filter-branch --tag-name-filter cat -- --all

确保在克隆为的新裸仓库中执行上述命令--mirror这样可以更轻松地推送所有更新的分支和标签。

不包含上述内容的旧标签/分支initial-commit-id仍将指向旧历史。您必须删除它们才能真正摆脱旧的历史。您应该可以使用git branch --contains <previous-initial-commit-id>找到它们git tag --contains <previous-initial-commit-id><previous-initial-commit-id>是先前的“初始提交”的ID,重写的历史记录不再引用该ID。

完成上述所有操作后,请参阅缩小存储库清单以了解如何完全摆脱旧的历史记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将旧的git历史记录合并到初始提交中

来自分类Dev

git:合并分支但保留提交历史记录

来自分类Dev

如何将贡献者更改合并到上游但忽略提交历史记录日志

来自分类Dev

将单个提交拆分为现有git历史记录中的多个提交

来自分类Dev

如何从git历史记录中完全删除提交

来自分类Dev

从git历史记录中删除提交(永远)

来自分类Dev

Git-从历史记录中删除提交

来自分类Dev

在git中合并拆分历史记录

来自分类Dev

将Git存储库合并到另一个保留所有历史记录的存储库中

来自分类Dev

将两个带有历史记录的 git 存储库合并到子目录中,并假装文件总是在那里

来自分类Dev

合并缺少提交历史记录的git存储库到保留历史记录的存储库

来自分类Dev

合并缺少提交历史记录的git存储库到保留历史记录的存储库

来自分类Dev

Git:将提交添加到历史记录中,该提交是之前的2个提交

来自分类Dev

将上游分支合并到具有重写历史记录的分支中

来自分类Dev

如何从git历史记录中删除提交,否则保持图形完全相同,包括合并?

来自分类Dev

如何重写git历史记录直到包含合并提交

来自分类Dev

Git清除历史记录并在合并后保留提交

来自分类Dev

如何合并而不丢失提交历史记录?

来自分类Dev

用合并提交将分支重新设置为压扁历史记录

来自分类Dev

从历史记录中删除合并并重新定序非顺序提交

来自分类Dev

还原未出现在HEAD“历史记录”中的提交和合并

来自分类Dev

Oracle SQL Developer中的旧SQL历史记录

来自分类Dev

zsh,修改历史记录中的旧命令

来自分类Dev

在Shell历史记录中查找旧命令

来自分类Dev

如何从git历史记录中提取提交?

来自分类Dev

git删除某些提交后的远程历史记录

来自分类Dev

作者的Git Squash顺序提交以压缩历史记录

来自分类Dev

存储git之类的提交更改历史记录

来自分类Dev

Git rebase将当前分支留在远程后面,想要更清晰的提交历史记录

Related 相关文章

  1. 1

    将旧的git历史记录合并到初始提交中

  2. 2

    git:合并分支但保留提交历史记录

  3. 3

    如何将贡献者更改合并到上游但忽略提交历史记录日志

  4. 4

    将单个提交拆分为现有git历史记录中的多个提交

  5. 5

    如何从git历史记录中完全删除提交

  6. 6

    从git历史记录中删除提交(永远)

  7. 7

    Git-从历史记录中删除提交

  8. 8

    在git中合并拆分历史记录

  9. 9

    将Git存储库合并到另一个保留所有历史记录的存储库中

  10. 10

    将两个带有历史记录的 git 存储库合并到子目录中,并假装文件总是在那里

  11. 11

    合并缺少提交历史记录的git存储库到保留历史记录的存储库

  12. 12

    合并缺少提交历史记录的git存储库到保留历史记录的存储库

  13. 13

    Git:将提交添加到历史记录中,该提交是之前的2个提交

  14. 14

    将上游分支合并到具有重写历史记录的分支中

  15. 15

    如何从git历史记录中删除提交,否则保持图形完全相同,包括合并?

  16. 16

    如何重写git历史记录直到包含合并提交

  17. 17

    Git清除历史记录并在合并后保留提交

  18. 18

    如何合并而不丢失提交历史记录?

  19. 19

    用合并提交将分支重新设置为压扁历史记录

  20. 20

    从历史记录中删除合并并重新定序非顺序提交

  21. 21

    还原未出现在HEAD“历史记录”中的提交和合并

  22. 22

    Oracle SQL Developer中的旧SQL历史记录

  23. 23

    zsh,修改历史记录中的旧命令

  24. 24

    在Shell历史记录中查找旧命令

  25. 25

    如何从git历史记录中提取提交?

  26. 26

    git删除某些提交后的远程历史记录

  27. 27

    作者的Git Squash顺序提交以压缩历史记录

  28. 28

    存储git之类的提交更改历史记录

  29. 29

    Git rebase将当前分支留在远程后面,想要更清晰的提交历史记录

热门标签

归档