git提交多个文件到远程服务器,解决使用commit提交大文件无法推送到远程库问题及git rebase使用详解...

解决这个问题并没有特别的(删除提交历史中某个文件,然后重新push),但是由于开始的使用失误,中间有使用git rebase和git reset命令处理,所以特此记录下

大文件无法push到远程仓库

问题

首先,故事(事故)的起因是这样的。

某次git push(类似测试使用,没有分支)到远程仓库时发生如下无法提交大文件的报错(大文件是一个pdf文件)

?

根据提示,如下查看大文件是哪个

1F0496003-0.png

commit的大文件无法push到远程库解决办法

首先说一下解决办法,需要修改提交历史,删除已提交到本地仓库的大文件的提交记录,

从commit的提交历史中删除指定文件的命令为git filter-branch --tree-filter 'rm -f 文件名' head

如下,删除大文件

?

执行删除成功会返回ref 'refs/heads/master' was rewritten提示,如果返回unchanged则表示没有任何更改。

如果文件路径包含空格需要用引号将删除文件路径包含起来。

然后重新push推送成功。

整体操作如下:

1F049CE-1.png

git filter-branch命令:

1F0491R2-2.jpg

git commit后的回滚

撤销已经提交的commit有两种方法:

使用 git reset --hard head^

使用 git rebase -i head~n

git reset --hard 丢弃最新的提交

代码提交后,需求发生变化导致之前提交的已经不合适,或者 代码提交后发现有严重bug,需要回滚可是使用这个命令:

git reset --hard head^

1,head^ 表示 最新提交head位置往回数一个提交, 几个 ^ 就往回数几个提交;

2,head~n 表示 最新提交head位置往回数n个提交

reset 命令只能回滚最新的提交。如果只想删除指定的某个提交,而保留最新的一次或两次commit,reset就无法做到了。

git rebase -i 丢弃指定提交

如果想撤销中间某次commit的情况,可以使用如下的命令:

git rebase -i head~2(列出最新的两次提交,然后决定对应提交的操作)

rebase -i是 rebase --interactive 的缩写;

git rebase -i 不仅可以删除commit, 还可以修改commit。 具体的可以查看rebase中提示的参数

如下执行git rebase查看命令参数:

?

常用的如下:

edit: 使用本次提交,在rebase到这次提交时候,会暂停下来等待修正

pick:使用本次提交,不操作修改

drop:删除这次提交

如下,修改查看最近3次的提交,然后删除(drop)倒数第三次commit,保存退出即可将倒数第三次commit中提交的所有内容删除

1F04a948-3.jpg

回滚最新的提交 :git reset 和 git rebase 命令都可以

回滚中间某次提交: git rebase 可以, git reset 不可以

如果提交已经同步到远程仓库,需要使用git push origin -f branch(分支名) 来将回滚也同步到远程仓库(master 分支谨慎使用 -f)

主要参考自

git rebase

git rebase执行失败后的退出

像上面,执行git rebase有可能导致失败,具体表现为bash中的仓库标识变为了(master|rebase 1/10)(m/n视reabse编辑内容而定)

1F0491Q3-4.jpg

解决办法是:执行git rebase --abort即可退出这个错误,回退到当前分支中,且数据和文件也都能恢复。

不小心git rebase后出现(master|rebase 1/10)的解决办法

git rebase成功后的回退

上面讲的是git rebase失败后的退出(,或回退),如果成功删除了某次commit,导致最终一些文件或数据丢失,如何恢复呢?

不要轻易使用 git rebase -i head 删除某次提交

git rebase -i head~2中删除某次提交的话,这次提交的所有更改和新增文件会全部取消,覆盖本地工作目录中的文件,也就是删除的这次提交和本次提交的上一次提交中间的所有更改都会取消,即使pick了删除提交的下一次提交,也无法保留(保留到最新提交时所有文件和文件夹的状态)

可以使用git reset --hard id命令,直接恢复commit到指定的提交时刻。

git reflog查看git提交记录

1F0495116-5.jpg

如上,可以直接看到需要恢复到的commit id是多少。比如恢复到id为71add05的时刻,执行git reset --hard 71add05等待恢复。本地仓库和文件就能恢复到指定提交时刻。

恢复指定的某次commit成功。

删除文件后需要执行git add -a或git rm ,将删除添加到暂存区, 如果执行 git add. 是不行的,区别如下:

git add -a 保存所有的修改(包括删除的文件、新增文件、已有文件的修改变更)git add . 保存新的添加和修改,但是不包括删除git add -u 保存修改和删除,但是不包括新建文件。

到此这篇关于记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用的文章就介绍到这了,更多相关commit提交大文件git rebase使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/codemissing/p/git_push_bigfile_issue.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值