我将一个大项目的上游与我当地的git repo合并.在合并之前,我有一些易于阅读的历史,但在合并之后,我的回购中有大量的历史记录.我不需要上游回购的所有历史提交.
在我想保留的上游合并之后还有其他提交.如何在保持上游合并之后的提交的同时,将从上游合并的所有历史记录压缩到一个提交中?
我有一个 Git 存储库,其中包含两个不相关的历史记录,如下图所示:
* commit a577995ec16ae05c2f81adfdba5ce28e7b8ba150
(A)
|
* commit d89ddb17122ab9eea72e7006461cb04a5a879770
|\ Merge: 95febfb f85c1bb
| |
| * commit 97b8dc2f7cf7e81d75fee5565423b554d191e4f3
| |
| * commit c86ff8d4695f63c30ba096a5a71ab8f50536a31c
| (B)
|
* commit a577995ec16ae05c2f81adfdba5ce28e7b8ba150
|
* commit 53c3a6a895c2732c8262e6467b586284fbe7c79d
(C)
Run Code Online (Sandbox Code Playgroud)
请注意,我在图表中标记了 Git 历史记录中的三个点 A、B 和 C,以便我可以在文本中引用它们。
从 C 和 B 开始的两个历史是无关的,并且开始时是两个完全独立的 Git 存储库。然后,这些历史以一种未知的方式组合起来(但已知涉及到git filter-branch
)。
如果我在历史记录中的 (A) 点签出,则在 C 点创建的文件会错误地显示在 git log 和其他命令中,就好像它们是由合并提交 fe63b2f 添加的一样。因此,像 git show、git Blame 等 git 命令都无法告诉我这些文件的真实历史记录。但它们确实向我展示了在 (B) 点添加的文件的真实历史记录。
正如评论中所建议的,如果我在合并提交上运行它,我会看到:
$ git …
Run Code Online (Sandbox Code Playgroud)