解决这个问题并没有特别的(删除提交历史中某个文件,然后重新push),但是由于开始的使用失误,中间有使用git rebase
和git reset
命令处理,所以特此记录下
大文件无法push到远程仓库
问题
首先,故事(事故)的起因是这样的。
某次git push
(类似测试使用,没有分支)到远程仓库时发生如下无法提交大文件的报错(大文件是一个pdf文件)
$ git push Enumerating objects: 204, done. Counting objects: 100% (204/204), done. Delta compression using up to 4 threads Compressing objects: 100% (183/183), done. Writing objects: 100% (187/187), 419.00 MiB | 2.21 MiB/s, done. Total 187 (delta 21), reused 0 (delta 0) remote: Resolving deltas: 100% (21/21), completed with 12 local objects. remote: Powered by GITEE.COM [GNK-3.8] remote: error: File: db501995ac30070d50bdc115a7708f9ba84332d3 403.57 MB, exceeds 100.00 MB. remote: Use command below to see the filename: remote: git rev-list --objects --all | grep db501995ac30070d50bdc115a7708f9ba84332d3 remote: Please remove the file from history and try again. (https://gitee.com/help/articles/4232) To gitee.com:findmoon/xxxx.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@gitee.com:findmoon/xxxx.git'
根据提示,如下查看大文件是哪个
commit的大文件无法push到远程库解决办法
首先说一下解决办法,需要修改提交历史,删除已提交到本地仓库的大文件的提交记录,
从commit的提交历史中删除指定文件的命令为git filter-branch --tree-filter 'rm -f 文件名' HEAD
如下,删除大文件
$ git filter-branch --tree-filter 'rm -f "Electron/pdf/677969 xxxx xxx.pdf"' HEAD Rewrite d1244f8fbc1f08b473bd498c023b09bd8ac3246b (12/12) (156 seconds passed, remaining 0 predicted) Ref 'refs/heads/master' was rewritten
执行删除成功会返回Ref 'refs/heads/master' was rewritten
提示,如果返回unchanged
则表示没有任何更改。
如果文件路径包含空格需要用引号将删除文件路径包含起来。
然后重新push推送成功。
整体操作如下:
git filter-branch
命令:
参考自git误commit大文件导致不能push问题解决
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
就无法做到了。
reset
命令git 删除某次指定的提交
git rebase -i 丢弃指定提交
如果想撤销中间某次commit的情况,可以使用如下的命令:
git rebase -i HEAD~2
(列出最新的两次提交,然后决定对应提交的操作)
rebase -i
是 rebase --interactive
的缩写;
git rebase -i
不仅可以删除commit, 还可以修改commit。 具体的可以查看rebase
中提示的参数
如下执行git rebase
查看命令参数:
$ git rebase -i HEAD~2 pick 71add05 20200225同步 pick 45d4805 测试删除中间某次commit # Rebase 36b460a..45d4805 onto 36b460a (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c <commit> to reword the commit message. # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
常用的如下:
edit: 使用本次提交,在rebase到这次提交时候,会暂停下来等待修正
pick:使用本次提交,不操作修改
drop:删除这次提交
如下,修改查看最近3次的提交,然后删除(drop)倒数第三次commit,保存退出即可将倒数第三次commit中提交的所有内容删除
回滚最新的提交 :git reset
和 git rebase
命令都可以
回滚中间某次提交: git rebase
可以, git reset
不可以
如果提交已经同步到远程仓库,需要使用git push origin -f branch(分支名)
来将回滚也同步到远程仓库(master 分支谨慎使用 -f)
主要参考自Git回退代码到某次commit的实现方法
git rebase
git rebase
执行失败后的退出
像上面,执行git rebase
有可能导致失败,具体表现为bash中的仓库标识变为了(master|REBASE 1/10)
(m/n
视reabse编辑内容而定)
解决办法是:执行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提交记录
如上,可以直接看到需要恢复到的commit ID是多少。比如恢复到Id为71add05
的时刻,执行git reset --hard 71add05
等待恢复。本地仓库和文件就能恢复到指定提交时刻。
恢复指定的某次commit成功。
git rebase 成功之后如何撤销
Git rebase命令使用实战
删除文件后需要执行git add -A
或git rm <file>
,将删除添加到暂存区, 如果执行 git add.
是不行的,区别如下:
git add -A
保存所有的修改(包括删除的文件、新增文件、已有文件的修改变更)git add .
保存新的添加和修改,但是不包括删除git add -u
保存修改和删除,但是不包括新建文件。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]