git push
不推files,它推动commits。具体来说,它会推送您拥有而他们没有的提交(无论“他们”是谁 - 您要推送到的遥控器)。他们抱怨您的至少一项提交至少包含一个大文件。
您需要推送一些不同的提交,以便您推送的提交不包含大文件。
作为一般规则,执行此操作的方法是完整保留每个“好”提交,将其复制到新分支,对于每个“坏”提交,提取好部分,删除坏部分,然后进行新提交从结果中。例如,假设这是远程提交的绘图:
A <- B <- C <- D <-- origin/master
假设您添加了三个提交,但中间一个出现了问题:
A - B - C - D <-- origin/master
\
E - F - G <-- master
当你跑步时git push
你的 git 发送提交E
, F
, and G
,而远程抱怨是因为F
有不应该有的文件。要解决此问题,您只需复制E
到一个新分支——我们称之为副本E'
——然后复制但修复F
使F'
,然后复制G
使G'
。我们也重命名旧的(“坏”)master
;事实上,让我们完全删除这个名字,这样我们就可以得到这个:
E' - F' - G' <-- master
/
A - B - C - D <-- origin/master
\
E - F - G [abandoned]
执行此复制的 git 命令是git rebase
。通常它只是直接复制;你想要它而不是复制E
,但然后停下来让你修复F
,然后复制G
,而实现这一点的方法是使用-i
or --interactive
flag.
一般来说,您应该只在更改时复制提交only you有,但幸运的是这正是那套git push
应该推动,无论你推动什么分支,origin/branch
(或者无论远程名称是什么,如果不是origin
)将界定远程拥有(和其他人拥有)的提交。
交互式变基可以做的事情远不止这些,所以请参阅Git 书以获得指示。您还需要弄清楚哪些提交包含哪些大文件;为了这,git show
and git diff
是有用的工具。