更改与gitlab活动的合并请求不同

更改与gitlab活动的合并请求不同,git,gitlab,Git,Gitlab,我正在尝试减小git存储库中.pack文件的大小。我删除了.pack文件中的一些不必要的对象,并将其推回到我的开发人员分支。当我在gitlab中检查我的活动时: 但我的合并请求如下所示: 有人能解释一下为什么合并请求显示49781个添加项而不是删除项吗 您不能合并历史记录的重写。你必须用力推才能掌握 Master仍然拥有所有对象,合并只会将重写的提交添加到其中,但不会从其历史中删除任何内容 但这仍然会留下引用旧对象的其他分支和标记,并阻止它们被删除。您还希望更新您的标记 您应该通过将--ta

我正在尝试减小git存储库中.pack文件的大小。我删除了.pack文件中的一些不必要的对象,并将其推回到我的开发人员分支。当我在gitlab中检查我的活动时:

但我的合并请求如下所示:


有人能解释一下为什么合并请求显示49781个添加项而不是删除项吗

您不能合并历史记录的重写。你必须用力推才能掌握

Master仍然拥有所有对象,合并只会将重写的提交添加到其中,但不会从其历史中删除任何内容

但这仍然会留下引用旧对象的其他分支和标记,并阻止它们被删除。您还希望更新您的标记

您应该通过将
--tag name filter cat--all
附加到filter命令,在所有分支和标记上重新进行筛选。请参阅有关如何正确收缩存储库的

git filter-branch <...> --tag-name-filter cat -- --all

rm .git/refs/remotes/origin/HEAD
git push -f origin 'refs/remotes/origin/*:refs/heads/*'
git push -f --tags
git fetch
git过滤器分支--标记名过滤器类别--all
rm.git/refs/remotes/origin/HEAD
git push-f origin'refs/remotes/origin/*:refs/heads/*'
git push-f——标记
git获取

您需要使用相同的筛选器(或删除至少相同或更多的筛选器),以便开发分支不会与其他分支完全不同,或者将开发重置为筛选前的状态。

您是如何删除不必要的对象的?这是否回答了您的问题?我使用了命令git filter branch-f--index filter“git rm--cached--ignore unmatch****.zip” rm-rf.git/refs/original/&&git reflog expire--all&&git gc--aggressive--prune git push origin--force--allSo如果我理解正确的话,通过删除不需要的对象来减小.pack大小不能像常规文件修改1那样完成。创建自定义分支2。签出文件3。进行修改并将其推回自定义分支4。将其合并回主分支。是的,但您已经知道,这就是为什么您使用了
git filter branch
。谢谢@kriz,我已经减小了.pack文件大小,并直接签入了主分支。我做了git-push-f-all和git-push-f-tags。之后,如果我再次克隆,我的.pack文件与旧文件相同。我不确定我遗漏了什么,你知道吗?如果在新克隆上运行
git-gc--prune=now--aggressive
,它会减少大小吗?在git-gc--prune=now--aggressive之后,在新克隆中它会从706mb减少到661mb。但原来的大小是89mb,我把它推到了主分支。