将一组更改的提交推送到远程 git 存储库的最有效方法是什么?

What is the most efficient way to push a set of changed commits in to a remote git repository?

我有一个远程 git 存储库,其中有将近 1000 个重提交,即:

C1 -> C2 -> C3 -> ... -> C949 -> C950 -> ... -> C1000

最近,我发现在提交 C950 中,我已将大型二进制对象添加到存储库中。我使用 git filter-branch --index-filter 命令删除了本地存储库中的文件。现在我的本地存储库如下所示:

C1 -> C2 -> C3 -> ... -> C949 -> C1001 -> ... -> C1051

我知道我可以撤消对远程存储库的提交,然后推送更改。但是关于我的大量提交,我想确定将我的更改推送到远程存储库的最有效方法。

更新 1: 到目前为止,很明显我应该在我的远程存储库上创建一个 push-force。但关键是我的远程回购不允许 nonFastForward 合并。还有其他方法可以解决这个问题吗?

如果一些大对象没有被git使用,它会自动删除它们,并且不会与任何远程共享它们。

只需使用 :

推送使用过的引用
git push origin master

(根据需要用您的遥控器和分支替换 origin 和 master)。

它只会推送包含在 master 中的对象和提交,这不应该是你的大提交的情况。

目前您正在尝试将一些已更改的提交 (C1001 -> .. -> C1051) 重写到您之前已经推送过的代码库中(即提交 C950 -> .. -> C1000),所以,你必须强推。

关于远程仓库上的 FastForward 配置,您应该可以直接访问远程仓库来更改配置。