Open EasonAssassin opened 1 year ago
小技巧系列:使用git时常用的技巧
参考公众号【神光的编程秘籍】;
git clone
git clone --depth 1
depth 1
git pull --unshallow
.git/config
fetch = +refs/heads/*:refs/remotes/origin/*
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*
git fetch
修复建议
depth 2
完善方法
git clone --filter=blob:none
git log:可以通过--author、--before、--after、--grep、--merges、--no-merges、--all来过滤某个作者、某个时间段、某个commit内容、非merge的commit、全部分支的commit等
git log
--author
--before
--after
--grep
--merges
--no-merges
--all
--format
git log --graph --format='%Cred%h%Creset -%C(yellow)%d%Creset %s%Cgreen(%cr) %C(bold blue)<%an>%Creset
git shortlog:是git log的统计结果,可以按照作者来分组统计。比如上一周某个人提交了多少commit:
git shortlog
git shortlog --all -n --after="2023-03-01" --before="2023-03-31" --no-merges --format="%h %as %s"
git shortlog --all -n --since="30 days ago" --no-merges --format="%h %as %s"
git reflog:记录ref的变化历史,比如分支切换、reset、新的commit等都会记录下来,也可以直接在.git/logs/refs下查看
git reflog
.git/logs/refs
git reset
1. Git clone --depth 1加速后遗症完美解决
git clone
超大项目时,clone会很慢,此时通过git clone --depth 1
来加速,效果明显;depth 1
只会下载最后一个commit关联的对象,下载内容更少,所以速度快git pull --unshallow
来解决.git/config
中的fetch = +refs/heads/*:refs/remotes/origin/*
,或者使用命令行git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*
git fetch
即可获取远程所有分支修复建议
depth 2
会比depth 1
快很多。因为depth 1
下载的commits的第一个是被修改过的"家根节点",push的时候跟服务器diff对不上导致需要全量发送整个repo文件。但是depth 2
得第二个commit跟服务器能对上,push时就可以顺利找出diff发送增量部分的文件。完善方法
git clone --filter=blob:none
可以只下载commits历史以及HEAD的文件,但不下载其他源码文件。后期可以查看commits历史以及切换分支,但是切换分支时会触发一次从remote下载源文件2. Git log进阶
git log
:可以通过--author、--before、--after、--grep、--merges、--no-merges、--all来过滤某个作者、某个时间段、某个commit内容、非merge的commit、全部分支的commit等--author
:过滤某个作者--before
、--after
:过滤某个时间段--grep
:正则匹配commit内容--merges
:merge的commit--no-merges
:非merge的commit--all
:全部分支的所有commit--format
:指定输出的颜色和格式git log --graph --format='%Cred%h%Creset -%C(yellow)%d%Creset %s%Cgreen(%cr) %C(bold blue)<%an>%Creset
git shortlog
:是git log
的统计结果,可以按照作者来分组统计。比如上一周某个人提交了多少commit:git shortlog --all -n --after="2023-03-01" --before="2023-03-31" --no-merges --format="%h %as %s"
git shortlog --all -n --since="30 days ago" --no-merges --format="%h %as %s"
git reflog
:记录ref的变化历史,比如分支切换、reset、新的commit等都会记录下来,也可以直接在.git/logs/refs
下查看git reset
到了一个之前的commit,又想恢复回去,这时候不知道最开始的那个commit hash是啥了,这时候就可以看reflog里的ref变化历史,找到之前的commit hash。