原理简述
- 首先git reset --hard 至错误提交记录的前一次提交;
- 借助git cherry-pick命令找回错误提交的那次代码,cherry-pick执行后,找回的代码也是已经提交后的,使用git reset --soft将代码恢复至未提交状态;
- 这时就可以对大文件补充 git lfs 标记操作(不会git lfs先去熟悉lfs),修改(标记)完成后,重新提交本次修改
- 后续借助cherry-pick,一次次将之前的提交历史找回(找回过程中,可使用git lfs ls-files查看标记有没有丢掉)
操作步骤
a. git log(记录近期提交历史)
b. git reset --hard xxxx(强制回退至提交大文件之前)
c. git cherry-pick xxxx (从git中拉取有问题的后一次提交)
d. git reset --soft xxxx (撤销问题提交的commit记录,得到之前修改后未暂存未提交的文件记录)
e. git lfs track filename
f. git lfs ls-files (查看lfs是否标记成功)
g. git add .gitattribute filename(将标记与被标记的文件添加到track列表)
h. git commit (重新提交问题)
i. git cherry-pick xxxx (从记录的提交历史里,拉取后续的提交记录,注意仅pick作者是自己的提交;不包含merge)
j. git lfs ls-files (查看lfs是否标记成功,可选操作)
k. 重复 i-j 直至恢复到最新代码
l. git pull (一次性拉取远端别人提交的代码进行合并)
m. git push
注:“xxxx”代表commit id;reset–hard之后,之前提交过的记录都不可见了,所以必须首先自己记录下提交记录,即步骤a