学习无他法,唯有持之以恒
Git解决中文乱码问题
git status 乱码
解决方法:
git config --global core.quotepath false
git commit 乱码
解决方法:
git config --global i18n.commitencoding utf-8
git status 乱码
解决方法:
git config --global i18n.logoutputencoding utf-8
注意:如果是Linux系统,需要设置环境变量 export LESSCHARSET=utf-8
开发修改:
gitlab上未合并的项目,merge reques的内容如何下载并合并到当前的项目中使用
https://baijiahao.baidu.com/s?id=1627219440390872098&wfr=spider&for=pc
# 1、找到下载按钮,下载Plain diff(补丁)包到本地,放入项目文件夹下
# 2、在git中切换到当前项目路径下
# 3、执行命令
git apply --stat patchfile
git apply --check patchfile
git apply patchfile
# 这三条命令分别是,检查patch文件格式,测试patch是否能应用到当前分支,应用此patch
# git apply、git am打补丁.diff 和 .patch
git 查看公钥
<>方法一:
<>文件夹方式查看
window系统打开目录文件:
C:/Users/user/.ssh/id_rsa.pub
复制该文件中全部内容为ssh-key。
<>方法二:
<>git bash方式查看
依次输入以下命令,最后获取的文件内容为ssh-key
$ cd ~/.ssh //如果该命令无效的话,则本地没有ssh-key公钥,需要创建本地公钥
$ ls
$ cat id_rsa.pub
git push到远端后,如何撤回push
1、本地reset到无问题commit
>> git reset --hard <版本号>
2、push到相应分支并覆盖
>> git push origin <分支名> --force
删除本地分支名、远程分支名
1、git branch -a # 查看所有分支名
2、git branch -d/-D(强制删除) # 删除本地分支名
3、git push origin --delete + 远程分支名 # 删除远程分支名
git常见退出命令:
>>> ctrl+d 退出
>>> 进入vim编辑器 退出 ESC切换到命令行模式 >> wq(保存并退出) q!(不保存,强退)
>>> git log查看commit记录的退出 >> q或者zz
>>> ctrl+c
>>> exit / quit
>>qqgit
远程分支已经删除,但本地查询还存在,如何删除
1、git branch -a
2、git remote show origin # 查看远程所有分支
3、git remote prune origin # 清空删除远程已经不存在的分支
1、为每次新的提交,手动在远程创建branch,from master 基于master分支
# 执行本地更新:
git remote update
2、修改最新commit的提交信息
$ git commit --amend
# 进入commit编辑界面,编辑后保存即可
3、不常用的操作
git restore <file> # 恢复文件 暂存起来
rm <file> -r #删除本地仓库指定文件
git reset有三个选项,--hard、--mixed、--soft。
# 仅仅只是撤销已提交的版本库,不会修改暂存区和工作区 git reset --soft 版本库ID # 仅仅只是撤销已提交的版本库和暂存区,不会修改工作区 git reset --mixed 版本库ID # 彻底将工作区、暂存区和版本库记录恢复到指定的版本库 git reset --hard 版本库ID
撤销commit/add
git reset HEAD . 回退所有add到暂存区的部分# git reset HEAD + 要回退的文件# git reset --head +回退的版本号 # 回退commit部分到原始本地创库
每次提交都应该为case新建一个branch,以免错乱冲突等问题产生
git checkout -b ---分支名-- # 创建新的分支并切换到其下
reset与revert的区别
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是直接把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
查看提交的commit的变化
git diff # commit的详细变动
git秘钥
1、配置 git config –global user.name "xxxxx" git config –global user.email "xxx@xx.xxx" 注:查下是否配置成功,用命令 git config --global --list 2、生成秘钥 ssh-keygen -t rsa -C "上面的邮箱" 注:执行上面命令后,连续回车3次 3、打印 cd ~/.ssh cat id_rsa.pub
gitlab问题
远程同步
# 下载远程仓库的所有变动 $ git fetch [remote] # 显示所有远程仓库 $ git remote -v # 增加一个新的远程仓库,并命名 $ git remote add [shortname] [url] # 取回远程仓库的变化,并与本地分支合并 $ git pull [remote] [branch] # 上传本地指定分支到远程仓库 $ git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突 $ git push [remote] --force # 推送所有分支到远程仓库 $ git push [remote] --all
内部文档
Clone and setup FAF project
1、fork FAF3.X >>> fork(分叉)FAF3.X到自己的分支
2、Create Development branch 创建开发分支
$ git branch [ branch-name ] 创建分支
$ git checkout -b [ branch ] 创建并切换分支
3、$ git checkout Development 切换分支
---- 本地直接切换到远程项目的Development即可 先切换在clone
4、Add remote 添加远程分支
$ git remote add <remote-name> ssh://git@gitlab.devtools.intel.com:29418/sfp-pfe- auto/firmware-automation-framework.git
*<remote-name> can be customized by yourself
创建远程分支名(自己定制)
Development:开发
1、开发新代码
2、git add . & git commit -m "详细描述信息"
3、冲突问题:执行pull --rebase 拉
$ git pull --rebase <remote-name> Development
4、Push code to personal repository
将代码推送到个人存储库:$ git push origin Development
Create merge request
创建合并请求
1、进入个人项目,点击顶部create merge request按钮
2、可选择设置要进行代码检查的指定对象(组内人员即可)
3、默认审批人是SFP组(包括我们的所有团队成员)
4、默认批准数为2,合并请求作者可以执行批准
5、批准后,项目业主和维护方可以合并(审批通过后方可提交合并按钮)
Submit code update while merge request reviewing
合并请求审阅时提交代码更新;提交新提交(推荐)>>指后续开发更新修改的代码部分
1、开发新新代码
2、git add . & git commit -m "详细描述信息"
3、$git push origin Development
4、Repeat 1-3 while new commit want to submit
当新提交要提交时重复1-3
When code change is strongly related to the latest commit or the code change is minimal, couldamend commit (not recommended. use with cautio
当代码更改与最新提交密切相关或代码更改最小时,可以修改提交(不推荐)。与cautio一起使用
-
Develop new code
-
$git add
-
$git commit --amend
-
$git push -f origin Development
添加远程源
# 前提:本地仓库已经创建且初始化完毕(代码已经提交到本地版本库)
# 本机命令,添加远程源:git remote add remote_name(自己定制名字) ssh@*.git
采用ssh协议的remote源
3)采用 https协议 或 ssh协议 与远程git仓库通信提交代码(一般都是项目负责人完成)
i) https协议方式,无需配置,但是每次提交都有验证管理员账号密码
>: git remote add origin https://gitee.com/doctor_owen/luffy.git # 配置远程源
>: git push -u origin master # 提交本地仓库到远程源
ii)ssh协议,需要配置,配置完成之后就可以正常提交代码
>: git remote add origin git@gitee.com:doctor_owen/luffy.git # 配置远程源
>: git push -u origin master # 提交本地仓库到远程源
iii)查看源及源链接信息
>: git remote
>: git remote -v
iv)删除源链接
>: git remote remove 源名字
# 注:origin远程源的源名,可以自定义;master是分支名,是默认的主分支
commit 书写规范
规范的作用
大多数情况下,看提交历史的人跟提交代码的人都不是同一个人,当别人阅读你的提交历史时,他很可能是不知道具体代码细节的,你如何在最短的时间内让他一眼知道每次提交的意义:
-
每次提交影响的具体范围?
-
这个bug在哪次提交中被修复了?
-
这个新功能是在哪次提交中增加的?
-
修改是否向下兼容?
-
是否回滚了代码?
-
是否只是修改了文档、调整了代码格式?
-
是否修改了测试、是否进行了重构?
-
是否对代码进行了性能优化?
提交消息格式
每个提交消息都由一个标题、一个正文和一个页脚组成。而标题又具有特殊格式,包括修改类型、影响范围和内容主题:
修改类型(影响范围): 标题
<--空行-->
[正文]
<--空行-->
[页脚]
标题<描述><修改-添加-更新-删除>
修改类型
每个类型值都表示了不同的含义,类型值必须是以下的其中一个:
-
feat:提交新功能
-
fix:修复了bug
-
docs:只修改了文档
-
style:调整代码格式,未修改代码逻辑(比如修改空格、格式化、缺少分号等)
-
refactor:代码重构,既没修复bug也没有添加新功能
-
perf:性能优化,提高性能的代码更改
-
test:添加或修改代码测试
-
chore:对构建流程或辅助工具和依赖库(如文档生成等)的更改