1.查找仓库中的大文件
git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`
或者
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')"
2.改写历史,去除大文件
git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all
git push origin --tags --force
git push origin --all --force
3.查找两个分支的分叉点:
git merge-base branch1 branch2
4.查找某个commit id所在分支:
git branch -a --contains $commitid
可以有多个:
第二种方式:
git name-rev 632116837dd4fb8cfbe41abf576e303c199e8a29
回退repo仓库到某个时间点:
repo forall -c 'commitID=`git log --before "2017-03-17 07:00" -1 --pretty=format:"%H"`; git reset --hard $commitID'
forall 操作分支中的所有仓库
-c 只操作当前分支
--before 早于指定时间点的提交记录
-1 只显示最近的1条记录(注意这是数字 1 ,如果要显示 2 条就写 2,以此类推)
"2017-03-17 07:00" 希望回退到的日期(时间点)
--pretty 以指定格式显示提交记录
%H 提交记录的hash值,即commit id(其它格式及更详细的信息可以使用命令git log --help打印帮助信息并查看“PRETTY FORMATS”小节)
命令含义:
这条repo命令的实质就是在当前分支的每个仓库下执行git log
命令,找出该仓库下符合时间条件的第一个提交记录,然后对该仓库执行git reset --hard
操作。就这么简单。
如果节省仓库空间:
如下命令可以只下载最近的一份提交记录,而不会管之前的提交记录,这样可以有效减少仓库数据占用的空间大小,可以看到只有一条提交记录,符合我们的预期。
git clone https://gitee.com/rtthread/rt-thread.git --depth=1
git clone 另外一个目录的仓库
git clone后面可以跟文件系统中的版本库路径,或者NFS挂载到本地的虚拟文件系统,GIT访问协议URL,SSH,HTTP/HTTPS等URI定位仓库等。
git clone /home/caozilong/Workspace/linux/linux-5.18.19
or
git clone /home/caozilong/Workspace/linux/linux-5.18.19/.git
删除历史记录:
$ git filter-branch --tree-filter 'rm README.md'
$ git push origin master --force
列出某个用户创建的所有分支
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | grep caozilong
确认被删除文件的删除记录
git log -1 --diff-filter=D -- <file_path>
重新拉取GIT仓库分支
以下是通过git命令重新拉取分支的方法:
方法一:
1.首先删除本地已有的分支:git branch -D [branch-name]
2.然后重新克隆带有指定分支的代码:git clone -b [branch-name] [repo-url]
方法二:
1.删除本地已有的分支:git branch -D [branch-name]
2.获取远程仓库的所有分支信息:git fetch origin
3.将远程分支检出到本地:git checkout -b [branch-name] origin/[branch-name]
实践步骤:
git branch -D linux-5.4.y
git fetch origin
git checkout -b linux-5.4.y origin/linux-5.4.y 或者:
git branch -D linux-4.15.y
git clone -b linux-4.15.y git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
注意:在上述方法中,请将[branch-name]替换为你想要拉取的分支名,将[repo-url]替换为项目的Git仓库URL。
git diff的输出格式
寻找GIT仓库中所有分支,所有历史文件中的特定字符串:
$ git grep "module_init" $(git rev-list --all)
grep逆匹配
要使用grep
命令来过滤日志文件中重要的条目,可以使用正则表达式或者其他搜索模式。如果你想要排除某些特定的条目,可以使用grep
的-v
选项来实现。
例如,如果你想要从一个名为application.log
的日志文件中排除包含“ERROR”的行,可以使用以下命令:
grep -v "ERROR" application.log
如果你有多个模式需要排除,可以重复使用-v
选项,或者使用grep
的-E
选项来指定多个模式:
grep -v -E "ERROR|WARN" application.log
这将会从日志中排除包含"ERROR"或"WARN"的行。比如如下命令将从dmesg LOG中过滤掉带有"logitec","usb","input", ...."systemd"字符的行。
grep -v -E "logitec|usb|input|Bluetooth|wlp|virbr0|audit|iwlwifi|pcicfg|snd|drm|80211|systemd" a.log