git不论犯了多大错, 都能反悔

缘起

push时, github报错, 文件太大, 压缩了文件依旧无法push, 因为本地之前的提交(12个)也包含大文件

弥天大错

git lfs track "*.pdf" "*.MOV"

# 傻叉操作一号
git filter-branch 
--force
--index-filter '
git rm --cached --ignore-unmatch
"技术/脑图_keydog_贱狗/参考/macos_swift_xcode参考/801_the_qualities_of_great_design.pdf"
'
--prune-empty
--tag-name-filter cat
-- --all
# 这里其实我稍有不满, 既然这玩意都是bug, 为毛git不把他删除了呢? 俺就不信有ci/cd是依赖这个bug运行的.


# 傻叉操作2号
git reset --hard ORIG_HEAD

反悔的权利

# 查看历史记录
git reflog --format="%gd %C(yellow)%h%Creset %Cgreen%cd%Creset %gs" --date=iso

# 回滚
git reset --hard 56d3271
# 这个世界回到原点

继续前行, 犯更大的错 –force

git的世界永远不要 –force

# 因为要修改12个commit, 所以先备份本分支
git branch backup-12commits 56d3271

# 安装工具
brew install git-filter-repo


# !!!!!!!!!!!!!!!这里是巨坑, 一定要先备份, 没有备份就别操作, 直接看下面一个段落!!!!!!!!!!!!!!!!!!!!!
# 修改提交, 这个千万不要 --force, git所有--force都是巨坑.
git filter-repo \
  --path "技术/脑图_keydog_贱狗/参考/macos_swift_xcode参考/801_the_qualities_of_great_design.pdf" \
  --invert-paths
# 这个命令依旧修改了所有提交, 并且, 我还是个该死的鬼, 我--force了.

然后此时 reset都救不回来了. 56d3271 已经变成下面这个了
ff00c54dfbd53725f286190493926705dc6d6e20

解决最大的错误–force

完蛋了, linus也救不了我.gst

最终只能用挨枪子的push -f, 如果没有被枪击的觉悟, 不要用.