git 高级操作

文件压缩
一个文件很大时,每一次做很小的改动,执行add之后都会产生一个新的commit,导致objects会很大,而且重复。执行git gc可以对其进行压缩处理,产生的文件存放与objects/pack中
git verify-pack -v .git/objects/pack/pack-xxxxx.pack 查看压缩文件所包含的原始文件
文件解压
git unpack-objects < .git/xxxxxxxx.pack 这里的pack文件必须移除到.git/objects/pack目录之外才能进行解压

清理垃圾
git fsck(fill system check) 查看悬空的,没有被引用的blob对象,也就是垃圾对象
git prune -n 也可以用来查看垃圾对象
git prune 清理垃圾对象

清除由于删除分支遗留的objects
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c.pruneExpire=now gc "$@"
场景:彻底从代码仓库中删除某些信息,比如敏感信息,密码等

如何不提交代码切换到其他分支?
git stash方式:
首先执行git add *
git stash 将代码暂时保存起来,可以同时对多个分支进行暂时存储
切换到其他分支完成开发之后回到当前分支执行git stash pop可以恢复到之前的状态
git stash show 查看当前分支暂时存储的内容
tea-app-oceanus/src/app.ts | 1 +
1 file changed, 1 insertion(+)

git stash list 查看所有具有暂时存储的分支list
stash@{0}: WIP on master: a88a5624 fix: 修复 deploy 执行异常
stash@{1}: WIP on v5.2.0: fb98f6b2 feat: 调整合并后的代码

git worktree方式:
git worktree add ../文件夹名称 分支名
通过git worktree list 可以查看当前的所有worktree list
现在我们可以自由切换到不同的tree进行工作,需要在新创建的目录中重新下载包。
本质上就是将原有的文件夹复制一份,并指定到特定的分支。
删除tree: git worktree remove 文件夹名称(项目目录的名称,不管执行add时文件夹路径嵌套有多深)

git commit --amend方式(修正方式):
先执行git add /git commit 操作
切换到其他分支完成修改,回到开始分支,再次进行修改提交时执行git commit --amend 覆盖上一次提交,提交信息不能修改。
当你在修补最后的提交时,与其说是修复旧提交,倒不如说是完全用一个 新的提交 替换旧的提交, 理解这一点非常重要。从效果上来说,就像是旧有的提交从未存在过一样,它并不会出现在仓库的历史中

你可能感兴趣的