2010-02-24 114 views
6

我不小心提交了log/test.log,但从未推送它。此后我做了一个混帐rm来摆脱它。但是当我尝试推送时,我仍然收到大量试图传输的数据。 git rm不应该解决这个问题。如果没有,我该如何解决?删除大文件后git push

回答

11

不要恢复提交,然后推送,因为巨大的文件仍然会在历史中传播。

既然你还没有推开它,要重做是最近的,请从你的历史,提交承诺:

$ git reset HEAD^

这将你的索引返回它的状态在父提交(HEAD^)中。现在你已经有了一个梦想:第一次添加和实现你的意思。

如果您已经做了其他后续提交,您需要git rebase -i <commit>其中<commit>是bad commit的父代的SHA-1。

例如(并注意SHA-1将在您的回购不同)

$ git rebase -i 57d0b28

将下降在类似于

pick 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar 

# Rebase 57d0b28..121802a onto 57d0b28 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
#

编辑与edit上与线替换pick重承诺

edit 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar

保存并退出你的编辑器返回到您的外壳,在那里你会看到形式

Stopped at 366eca1... This has a huge file 
You can amend the commit now, with 

    git commit --amend 

Once you are satisfied with your changes, run 

    git rebase --continue

从那里的消息,删除有问题的文件

$ git rm --cached big-nasty-file 
rm 'big-nasty-file'

修改(--cached只从指数中删除文件)提交

$ git commit --amend

,并完成底垫

$ git rebase --continue
+0

你如何获得的SHA1地址,请提交? – Daniel 2010-02-25 03:48:57

+0

@Daniel运行'git log'或'gitk',例如。 – 2010-02-25 11:26:38

2

如果您尚未推送,则可以使用git rebase -i编辑提交历史记录,同时删除addrm。一个警告是,你必须小心不要编辑任何已经推送的提交。

http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

你问你是否仍然可以做到这一点,如果有在提交和其他提交以下这一个其他的变化。这取决于。您应该能够编辑/删除任何未完成的提交,而不仅仅是最新的提交。但是如果以后的更改很大程度上依赖于已删除的提交的更改(例如,您添加了一个文件,然后在稍后的提交中对其进行了编辑),那么rebase可能会失败。如果你删除一个提交,你将失去该提交的所有更改。我不知道从提交中删除单个更改的方法。如果您不想丢失test.rb提交中的其他更改,则可以在删除提交之前生成补丁(使用git show <commitid> > /tmp/patch或使用内置的git patch功能)。然后编辑您的补丁文件以删除大的test.rb,但保留所需的更改,然后重新将补丁应用到头部。

如果你有我前面提到的,其中底垫中失败的问题(或者你认为它会失败),可以为您节省补丁所有您提交的问题提交后,将它们全部删除,而为了重新申请他们。

+0

虽然我没有推,因为我已经做了多次提交。 rebase仍然是一个选择吗? (在与意外日志/ test.rb提交了它一吨的文件) – Daniel 2010-02-24 15:28:36