推荐一个登陆git网站的好用的工具 Steam++
听这个名字就知道,之前一直用这个软件去登陆steam商店,偶然发现还能加速GitHub,免费且流畅
git init #在当前目录初始化 Git 仓库
git log #查看提交历史 --oneline(简洁显示)、-p(显示差异)
git status #查看工作区状态(修改/未跟踪的文件)
git add <file> #将文件添加到暂存区 git add .(添加所有文件)
git add -A #提交所有已经修改的文件,包括删除新建文件
git add -u #提交git上已跟踪的文件,不包括删除和新建的文件
git checkout -- <file> # 撤销指定文件的修改
git reset #回退git add 操作
git reset HEAD^ #撤销最近一次提交并保留修改
git push origin +HEAD~1:master #撤销已经推送到远程仓库的提交
git pull #拉取远程仓库并合并到当前分支 git pull origin main
git fetch #仅拉取远程仓库更新,不自动合并 git fetch --all
git reset #回退提交 --soft(保留修改)、--hard(丢弃修改)
git diff #查看工作区与暂存区的差异 git diff HEAD(比较最新提交)
git commit #提交暂存区的修改 -m "message"(添加提交信息)
git revert <commit> #撤销指定提交(生成新提交) git revert HEAD(撤销最新提交)
git rm <file> 删除本地和远程的文件
git rm --cached <file> 删除远程的文件,保留本地
git remote -v #查看git版本
git check <分支名> #切换分支名
git branch #查看当前分支git init(如果要上传本地仓库)
# git clone https:... 或者克隆git上的代码
# git checkout -b new-feature 为了避免直接在 main 或 master 分支上进行开发,通常会创建一个新的分支
git status #可以看工作区状态,看看有哪些文件有修改的
git add <file> #添加到暂存区
git commit -m "" #提交更改
#git pull origin master 每次git push之前可以拉取远端更新并且合并到本地,以避免冲突
#git fetch origin 也可以拉去最新的远端代码
#git reset origin/kylinos-next --hard 强制本地代码和远程保持一致
git push origin master #推送到远程仓库以上都是git的最基础的用法,但是作为内核开发的我们,仅仅学会这些还远远不够,因为内核代码是有很多个版本迭代的,所以对代码的版本管理非常重要,现在需要更深入的了解git的用法:
分支管理是一个好东西,各个内核版本都可以延伸一个分支出来,分支更有利于团队协作,你修改分支代码并不会影响主线上的代码。
git branch # 查看本地分支
git checkout <branch-name> #切换分支
git branch <branch-name> # 创建新分支
git branch -d <branch-name> # 删除本地分支
git push origin --delete <branch-name> # 删除远程分支
git branch -m <old-name> <new-name> # 重命名本地分支
git merge <branch-name> #合并分支到当前主分支,首先要执行git checkout切换到主分支git log # 查看完整提交历史
git log -p <file> # 查看某个文件的修改历史
git show <commit-id> # 查看某次提交的详细信息
git log --grep="keyword" # 根据提交信息搜索提交
git log -S "keyword" # 根据代码内容搜索提交
git log --follow --diff-filter=R --name-status -1 -- d # 查看d文件的最近一次重命名提交tag顾名思义就是给东西贴上标签,有了标签我们就可以更好的检索信息了,方便你追溯某个版本的代码。
git tag v1.0.0 # 在本地仓库创建名为 v1.0.0 的轻量标签,标签指向当前所在的提交,标签信息存储在 .git/refs/tags/v1.0.0 文件中,标签不包含额外元数据。
git tag -a v1.0.0 -m "Release version 1.0.0" # 在本地创建附注标签 v1.0.0,创建独立的标签对象(存储在 .git/objects)创建独立的标签对象(存储在 .git/objects)。
git push origin v1.0.0 # 推送指定标签
git push origin --tags # 推送所有标签
git tag -d v1.0.0 # 删除本地标签
git push origin --delete v1.0.0 # 删除远程标签在 Git 中,标签(tag)是针对整个提交(commit)的,而不是针对单个文件的。这意味着你不能直接给单个文件打标签。
这篇主要介绍git业务方面的常用的方法:
#拿smb2_parse_contexts这个函数举例子
cd 主线分支
git blame fs/smb/client/smb2pdu.c | grep smb2_parse_contexts #会弹出commit-id 找到定义函数的commit-id
git show <commit-id> #查看这个commit是否是第一次提交
git log --oneline <commit-id> #如果不是第一次提交,查看这个commit-id的前一个提交
git checkout <commit-id> #回退到之前版本
#然后再重复第二个步骤这里重点讲一下git blame的用法:
git blame 是 Git 中用于查看文件每一行的修改历史记录的命令。它的作用是追踪文件中每一行的最后一次修改是谁做的,修改的时间是何时,修改的提交信息是什么。
#比如想查看某一个文件的改动记录,可以用
git blame <file> xxx.c #会输出每一行代码的作者、提交哈希和提交时间,格式如下:
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 1) /*
#git blame 有一些常用的参数
-L <start>,<end> :仅查看文件的某个行范围。
git blame -L 10,20 xxx.c #查看xxx.c文件的第 10 行到第 20 行的代码历史
-C:查找代码移动或复制的历史。此选项会查找哪些行可能是从其他地方复制或移动过来的
git blame -C xxx.c
-f:在输出中包括文件路径,默认情况下,git blame 只会显示文件内容,不包含文件名
git blame -f xxx.c
-s:只显示提交的哈希,不显示其他信息。
git blame -s xxx.c #只会输出相关的哈希值。
cd kylinx-4.19 #进入4.19分支
git branch #查看是否是 kylinos-next分支
git checkout kylinos-next # 如果不在目标分支,切换到 kylinos-next
git fetch origin # 从远程拉取代码到本地
git reset origin/kylinos-next --hard # 强制本地代码和远程保持一致
git show <commit-id> #从工单信息获取需要修复的CVE列表 <commit-id> 是上游修复补丁
git show --stat <commit-id> #可以查看某个文件修改的统计
git log --grep="<修改信息>" #查看是否补丁已经合入?
git remote -v #如果需要合入补丁,就查看上游
git log --all --grep="CVE-XXXX-XXXXX" #根据CVE查看上游是否已经生成了补丁,是,则从上游或在openeular生成补丁
git format-patch -1 <commit-id> #根据上游和openeular生成补丁
git log -1 <hash> --format="%P" #查询父提交
git log --graph --oneline <commit-id>~5..<commit-id> # 查看该 commit 是否依赖其他补丁
git am 001-xxx.patch --reject #合入补丁并且生成冲突文件.rej
git status -s #查看合入补丁的状态
git add -u #合并已经解决的文件
vim <冲突文件.rej> #打开冲突文件.rej
:vsp <冲突文件> #vim两个窗口打开文件对比分析
#解决冲突后再次合并
git add <已解决的文件>
git am --continue # 完成补丁应用
#合并完成后,编译测试
rm x86_64-build -rf && mkdir x86_64-build
cp arch/x86/configs/kylinos_generic_defconfig x86_64-build/.config
make O=x86_64-build menuconfig # 比如编译nfs模块,搜索 nfs_fs
time make O=x86_64-build bzImage -j`nproc`
#提交更改
git commit --amend # 添加测试记录
git push origin cve-2024-xxxx-fix