首页 > 投稿

Git使用经验6-删除远端历史记录

投稿会员昵称: 鑫坤机电关注投稿量:粉丝量:关注量:   2025-05-01 23:41:01A+A-

Git使用经验6-删除远端历史记录(pic1)

删除远端的历史记录但是不影响最新的仓库内容是笔者一直想实现的功能,有两个很不错的用处:

  1. 有的历史提交不慎包含了比较敏感的信息,提交的时候没注意,过了一段时间才发现。这个时候已经有了很多新的历史提交,无法再回退了。
  2. 有时候会拿Git仓库存储代码文件以外的内容,比如美术资源、依赖库等等。这时除了少数提交大部分历史提交是没意义的,还很占仓库空间。

不过要说明的是Git删除历史记录跟我们想象中的不太一样,需要使用的是rebase(变基)功能。这个功能对仓库的改变还挺大的,以防外一我们还是先备份,然后创建一个分支:

git checkout -b cleanup-history

使用变基指令,重写提交历史,如下所示。

git rebase -i HEAD~n

-i表示交互式重写,会弹出一个包含所以历史提交记录的页面让你进行编辑。这里的n表示往前回溯n个版本。例如先检查一下所有的历史提交:

git rev-list --count HEAD

如果得到的数值是500,那么将n设置成499就可以看到所有的历史记录。有时候这个数值不对,可能是因为包含了合并的提交,那么可以试一下:

git rev-list --first-parent --count HEAD

或者:

git rev-list --count --no-merges HEAD

来大概估一下n的数值。当然如果你回溯的历史提交不太远,给个大概能看到你要删除的历史提交即可。

git rebase -i HEAD~n之后在交互式页面中,将需要删除的历史提交记录的操作从pick改为drop。保存并退出编辑器,Git会开始重写历史,删除指定的提交。有时候你想删除的历史提交太多,一个一个改成drop很麻烦,可以使用NotePad3这样的文本工具,通过列选取功能来批量修改。

如果你删除的历史记录足够远足够多,接下来你就会看到比较揪心的一幕,你的Git代码仓库会回溯到最远的历史状态,然后逐步开始自动提交,这个过程很可能会出现一些问题。例如检测到空提交,会提示并中止变基过程,可以进行跳过:

git rebase --skip

还可能会遇到冲突的问题,让你解决冲突。如果是文件文件,就编辑后再git add xxx;如果是二进制文件,要么删除git rm xxx,要么直接git add xxx冲突的文件,然后继续变基:

git rebase --continue

接下来如果一路顺利,就将改动强制推送到远程分支:

git push origin cleanup-history --force

检查一下分支的历史提交内容,没有问题的话将这个分支替换为主分支:

git checkout main
git reset --hard cleanup-history
git push origin main --force

如果想彻底清除这些提交记录,并压缩Git仓库的体积,所以可以使用了如下指令:

git reflog expire --expire=now --all
git gc --prune=now --aggressive

对于其他用户,可以使用如下指令进行更新:

git pull -rebase origin main

在笔者实际的使用过程中,遇到的冲突问题非常多,经常要停下来解决冲突的问题。笔者也不太理解为什么删除历史记录还要解决与当前仓库快照冲突的问题,猜测可能因为笔者的历史提交记录包含了很多合并的提交。因此这个方法对有的读者可能不太适用,可能合并历史提交、或者只保留最新提交的版本更合理一点。


提示:在享受本文内容的同时,请注意版权归属 徐州鑫坤机电设备有限公司https://www.xzxkjd.com如果您觉得有价值欢迎分享但请务必注明出处,感谢您的理解,谢谢

以下部分内容需要登录查看 立即登录

点击这里复制本文地址 以上内容由用户上传和网络在徐州鑫坤机电设备有限公司整理呈现,如有侵权请联系站长:xzxkjd@qq.com !

1. 本网站可能包含第三方链接,请注意甄别,我们不对其内容负责。

2. 请遵守网络法律法规,在浏览网站时,不传播违法、不良信息,共同维护网络健康。否则后果自负!

3. 本网站内容受版权保护,未经许可,严禁转载!

4. 长时间浏览网站请注意适时休息,保护眼睛,保持身心健康。

5. 在浏览网站过程中,如有任何疑问或需要帮助,请随时联系我们的客服团队。

6. 如有好的内容可投稿申请发布我们收到会第一时间审核发布。

7. 请注意系统即将进行维护可能会影响部分功能的正常使用请提前规划好您的浏览时间,感谢您的理解,享受每一次在线体验

相关内容

加载中~

Copyright ©2012-2024徐州鑫坤机电设备有限公司版权所有
苏ICP备2023032739号-1ICP备2023032739号-2苏ICP备2023032739号-3X
苏公网安备 32038202000884号增值电信业务经营许可证:合字B1-20235517
开发中| 关键词| 网站地图| 网站地图| 网站地图| TAG集合

今日IP人数0今日浏览量(PV)0昨日IP人数0昨日浏览量(PV)07天IP人数07天浏览量(PV)0

网站已运行:

在线客服
服务热线

服务热线

0516-86596070

联系邮箱

服务热线

xzxkjd.@qq.com

微信咨询
我的网站名称
我的网站名称
交流群
返回顶部
X我的网站名称

截屏,微信识别二维码

微信号:xkyinxiu

(点击微信号复制,添加好友)

  打开微信

微信号已复制,请打开微信添加咨询详情!