问题:
有时候误操作了大文件,推送到本地仓库却无法提交到远程仓库(报错)
方法1,删除本地仓库中的大文件
查看仓库里有哪些文件夹
dir
删除python文件夹(这里的文件夹名如果有空格命令行需要用"\ "来拼接例如:python python要换成python\ python)
git rm -r --cached python/*
或者
或者根据提示执行命令,如下查看大文件是哪个,直接删除这个大文件
从commit的提交历史中删除指定文件
git filter-branch --tree-filter 'rm -f 文件名' HEAD
git filter-branch --tree-filter 'rm -f "python/python_reptile/imgchuli/python视觉网络models.zip"' HEAD
删除成功会返回Ref 'refs/heads/master' was rewritten提示,如果返回unchanged则表示没有任何更改。
再次提交
方法2:重新拉取本地仓库
从云端重新克隆一个git仓库,把修改好的本地文件放入新的git本地仓库,旧的删除
其他命令:
查看本地+远程所有分支的全部提交
git log --graph --all
查看修改内容
git status
查看提交记录
git log
撤销未提交的修改(未git add .)
# 可以看到改的内容
git diff
<strong>git checkout src/com/jay/example/testforgit/MainActivity.java</strong>
撤销本地add
Git中HEAD代表当前版本,上一个版本就是HEAD^,再上一个版本就是HEAD^^依次类推HEAD~2 2个版本
# 已经add了的话,那么checkout是没任何作用的,我们要先取消添加才可以撤回提交
# 使用reset默认的--fixed参数,假装回退到当前版本,撤销add
git reset HEAD
# 后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD python/
git reset HEAD src/com/jay/example/testforgit/MainActivity.java
# reset 有三个参数
--fixed # 默认,不删除工作空间改动代码,撤销commit,撤销add
--soft # 不删除工作空间改动代码,撤销commit,不撤销add
--hard # 删除工作空间改动代码,撤销commit,不撤销add
# 也撤销指定文件的add
git reset HEAD fileName.txt
git checkout src/com/jay/example/testforgit/MainActivity.java
撤销本地commit
git reset HEAD^
git reset HEAD~
git reset HEAD~2 # 回退2个版本
# 注意在windows的终端使用该命令时,由于^为windows的默认换行符
# windows下
git reset "HEAD^"
git reset HEAD^^
回退remote版本
git revert:撤销某个版本的提交
git log
git reset --hard HEAD
或者
git reset --hard ad2080c
# 撤销<commit-hash>这个版本的操作
git revert [-n] <commit-hash>
# 默认需要立刻commit,可以添加-n或--no-commit参数推迟commit
# 接下来直接commit、push即可,会在log中追加新的commit记录
# 连续多个revert
git revert -n <commit-hash_start>..<commit-hash_end>
# 会撤销( commit-hash_start, commit-hash_end ] 的提交
若要撤销执行完的revert操作,只需对这个revert操作也执行一次revert即可
git reset + git push -f
# 回退到<commit-hash>这个版本
git reset <commit-hash>
# 强制推送
git push -f
# 注意,此种回退相当于彻底回退到之前的版本,晚于该版本的提交log也会被清除,且此次回退无记录
回退后再回新的版本
# 查看输入过的指令找到版本号
git reflog
# 键入
git reset --hard ad2080c