Git无意中推送文件
Posted
技术标签:
【中文标题】Git无意中推送文件【英文标题】:Git unintentionally pushing files 【发布时间】:2013-07-18 19:19:56 【问题描述】:问题
我不小心将我的数据集添加到我的提交中。当我推送提交时,它给了我标准文件大小错误(数据集文件超过 100MB)。我使用git revert
恢复了之前的提交,并且只添加了我的 ipython 笔记本和一些图像文件。
现在,当我推送我的提交时,它仍然无法推送数据集文件
使用git diff --stat origin/master
我找到了要推送的文件:
agconti@agconti-Inspiron-5520:~/my_dev/github/US_Dolltar_Vehicle_Currencny$ git diff --stat origin/master
.ipynb_checkpoints/US_Dollar_Vehicle_Currency-checkpoint.ipynb | 1972 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CountryNumbers_indexConti.xlsx | Bin 0 -> 22762 bytes
Italian Trade/US_Dollar_Vehicle_Currency.ipynb | 1972 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Italian Trade/images/3_year_exchange_rate_volitlity.png | Bin 0 -> 11808 bytes
Italian Trade/images/Currency_usage_breakdown_top20.png | Bin 0 -> 404666 bytes
Italian Trade/images/Currency_usage_observations_top20.png | Bin 0 -> 274964 bytes
Italian Trade/images/Currency_usage_trade_value_top20.png | Bin 0 -> 211274 bytes
Italian Trade/images/Exchange_rate_volitlity_top20.png | Bin 0 -> 345899 bytes
Italian Trade/images/prop_xm_top20.png | Bin 0 -> 258254 bytes
Italian Trade/images/rate_derive_activity_top20.png | Bin 0 -> 214196 bytes
README.md | 2 +-
US_Dollar_Vehicle_Currency.ipynb | 809 --------------------------------
images/3_year_exchange_rate_volitlity.png | Bin 11808 -> 0 bytes
images/Currency_usage_breakdown_top20.png | Bin 404666 -> 0 bytes
images/Currency_usage_observations_top20.png | Bin 292532 -> 0 bytes
images/Currency_usage_trade_value_top20.png | Bin 224008 -> 0 bytes
images/Exchange_rate_volitlity_top20.png | Bin 361868 -> 0 bytes
images/exporter_economic_strength_top20.png | Bin 0 -> 166575 bytes
images/exporter_trade_health_top20.png | Bin 0 -> 277557 bytes
images/prop_xm_top20.png | Bin 275777 -> 0 bytes
images/rate_derive_activity_top20.png | Bin 228728 -> 0 bytes
libpeerconnection.log | 0
22 files changed, 3945 insertions(+), 810 deletions(-)
没有数据集文件。即便如此,他们仍然受到推动。
如何让 git 停止推送数据集文件?
看一下错误信息:
Delta compression using up to 8 threads.
Compressing objects: 100% (27/27), done.
Writing objects: 100% (30/30), 279.15 MiB | 389 KiB/s, done.
Total 30 (delta 7), reused 3 (delta 0)
remote: Error code: c4fe7114933ad585dc5027c82caabdaa
remote: warning: Error GH413: Large files detected.
remote: warning: See http://git.io/iEPt8g for more information.
remote: error: File ForConti_AllItalianImportsVCP.raw is 987.19 MB; this exceeds GitHub's file size limit of 100 MB
remote: error: File italian_imports.csv is 1453.55 MB; this exceeds GitHub's file size limit of 100 MB
remote: error: File italian_imports_random_10percent.csv is 138.30 MB; this exceeds GitHub's file size limit of 100 MB
To https://github.com/agconti/US_Dollar_Vehicle_Currency
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/agconti/US_Dollar_Vehicle_Currency'
我尝试过的
How can I see what I am about to push with git?
How to revert Git repository to a previous commit?
【问题讨论】:
您可以删除本地存储库并克隆一个新副本吗? 这不是.gitignore
可以解决的问题吗?我试图理解 - 是否好像恢复的提交仍然与所需的提交一起被推送?
@patrickvacek 是的,这在未来肯定会奏效。但是现在,在我使用sudo git rm -r --cached datafile.file
删除所有数据集文件后,它们仍在被推送。我现在需要解读这个,这样我就可以在未来推动和做 .gitignore 之类的事情。
@Daenyth 我可以,但我会放弃自上次推送以来的所有更改......这很多。
【参考方案1】:
因为您使用了git revert
,这些文件仍然在您的存储库中被引用。听起来这是您的基本顺序:
git add <a bunch of stuff including big files>
git commit # creates a commit including the unwanted files
# realize mistake
git revert HEAD # this creates a new commit on top of the previous one,
# that simply undoes all the changes in the previous commit
# now trying to push
如果您在您的master
中没有其他提交,因为(或介于两者之间)错误提交和错误提交的恢复(换句话说,您的图表看起来像(其中 Z 是最后一次好的提交):
.....Z--A--A' <- master
那么以下应该会有所帮助:
git reset --hard Z
这会将您的master
分支以及您的工作目录和索引重置回Z
,这意味着它看起来像是错误的提交并且从未发生过还原。
如果上面A
点之后还有其他commit,则需要使用git rebase -i Z
,并删除A
和A'
对应的两行。
如果您想保留A
中的其他更改(即不仅仅是在那里提交的大文件),您需要使用git rebase -i
路由,并标记A
为edit
。这将导致rebase
在刚刚完成A
提交时停止,然后您可以这样做:
git rm --cached <big files> # remove the files from your index
git commit --amend # fix up the last commit
git rebase --continue # let rebase finish up the rest
完成上述任一操作后,git push
应该能够再次继续...
【讨论】:
【参考方案2】:revert
命令将撤消操作记录为常规提交。大文件仍在历史中。也许您需要从历史记录中完全删除错误提交和恢复的提交。与
git rebase -i origin
应该打开一个编辑器——如果您只是删除指示错误提交和恢复的行,您应该重新启动并运行。有关交互式 rebase 的更详细说明,请参阅 the Git book。
【讨论】:
【参考方案3】:git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch italian_imports.csv' --prune-empty -- --all
【讨论】:
注意: 上面的命令将变基整个分支,并且需要强制推送到远程以覆盖远程的历史记录。在执行上述命令之前,请确保您的历史记录是最新的!强制推送到 github 并设置git push -f
标志。这是需要强制推动的一种情况,但要小心强制推动!以上是关于Git无意中推送文件的主要内容,如果未能解决你的问题,请参考以下文章
在调用 git push 之前,我如何知道要推送多少个文件? [复制]