我不小心提交了log/test.log,但从未推送它。此后我做了一个混帐rm来摆脱它。但是当我尝试推送时,我仍然收到大量试图传输的数据。 git rm不应该解决这个问题。如果没有,我该如何解决?删除大文件后git push
回答
不要恢复提交,然后推送,因为巨大的文件仍然会在历史中传播。
既然你还没有推开它,要重做是最近的,请从你的历史,提交承诺:
$ 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
如果您尚未推送,则可以使用git rebase -i
编辑提交历史记录,同时删除add
和rm
。一个警告是,你必须小心不要编辑任何已经推送的提交。
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,但保留所需的更改,然后重新将补丁应用到头部。
如果你有我前面提到的,其中底垫中失败的问题(或者你认为它会失败),可以为您节省补丁所有您提交的问题提交后,将它们全部删除,而为了重新申请他们。
虽然我没有推,因为我已经做了多次提交。 rebase仍然是一个选择吗? (在与意外日志/ test.rb提交了它一吨的文件) – Daniel 2010-02-24 15:28:36
- 1. git push删除几个文件后
- 2. git push - 强制删除远程文件?
- 3. Heroku在git push时删除文件?
- 4. 在git push force后删除提交
- 5. Openshift - 在git push后删除laravel上传的文件
- 6. git push后git拉到www文件夹
- 7. 如何在push之前从git repo中删除文件?
- 8. git克隆并拉大文件删除
- 9. Git - 删除大文件的提交
- 10. 删除git文件
- 11. Git拉 - 删除文件
- 12. 将'git push origin <branch>'从本地删除后远程删除<branch>?
- 13. jwt config secret文件push git
- 14. git - push java .classpath文件?
- 15. Git - 从.git文件夹中删除文件,而无需远程删除文件
- 16. git防止推送,因为太大,已被删除的文件
- 17. git和删除文件
- 18. git删除新文件
- 19. git checkout删除文件
- 20. 删除GIT中的文件
- 21. 从git中删除文件
- 22. Bitbucket git删除文件
- 23. git的MV不会删除旧文件
- 24. 如何删除由git push origin创建的git分支?
- 25. 删除git commit的所有文件?
- 26. 无法从git commit中删除文件
- 27. 你可以使用git删除文件后恢复文件吗?
- 28. Git的部署:在删除文件时,按文件中删除
- 29. 从Git历史中删除文件而不删除文件
- 30. git push tag错误的含义:“删除一个不存在的文件。”
你如何获得的SHA1地址,请提交? – Daniel 2010-02-25 03:48:57
@Daniel运行'git log'或'gitk',例如。 – 2010-02-25 11:26:38