Git学习
Git基本操作
设置签名
在使用git前,需要先设置签名,目的是区分不同开发人员的身份
- 项目级别/仓库级别:仅在当前本地库范围内有效
$ git config user.name "zt"
$ git config user.email "godtaoz@163.com"
- 系统用户级别:登录当前操作系统的用户范围
$ git config --global user.name "zt"
$ git config --global user.email "godtaoz@163.com"
查看自己的用户名和邮箱地址
#查看局部的用户名和邮箱
$ git config user.name
$ git config user.email
#查看全局的用户名和邮箱
$ git config --global user.name
$ git config --global user.email
#查看Git所有的设置
$ git config --list
获取本机的SSH公钥
开发中需要连接远程仓库,必须在仓库中添加SSH公钥才可以提交
$ ssh-keygen #获取SSH公钥
执行完成后会在 C:\Users\账户名\.ssh 目录下生成一个id_rsa文件夹,里面有 id_rsa 和 id_rsa.pub 两个文件,id_rsa 文件是私钥,id_rsa.pub 是公钥,公钥里面的内容就是用来在远程仓库进行 SSHKEY 绑定的。
$ cat ~/.ssh/id_rsa.pub #查看SSH公钥
本地库初始化
$ git init
执行后会在当前目录下生成一个 .git 文件夹,目录中存放的是本地库相关的子目录和文件
状态查看
$ git status #查看工作区、暂存区状态
添加
$ git add [file name] #将工作区的“新建/修改”添加到暂存区
提交
$ git commit -m "commit message" [file name] #将暂存区的内容提交到本地库
查看历史记录
$ git log #历史记录 多屏显示控制方式:空格向下翻页 b 向上翻页 q 退出
$ git log --pretty=oneline #每条记录单行显示
$ git log --oneline #每条记录单行显示,简化索引
$ git reflog #每条记录单行显示,HEAD@{移动到当前版本需要多少步}
版本前进后退
- 基于索引值操作[推荐]
$ git reset --hard 93d9186 #git reset --hard [局部索引值]
- 使用^符号:只能后退
$ git reset --hard HEAD^ #一个^表示后退一步,n 个表示后退 n 步
- 使用~符号:只能后退
$ git reset --hard HEAD~n #表示后退 n 步
reset 命令的三个参数对比
-
--soft 参数- 仅仅在本地库移动 HEAD 指针
-
--mixed 参数-
在本地库移动 HEAD 指针
-
重置暂存区
-
-
--hard 参数- 在本地库移动 HEAD 指针
- 重置暂存区
- 重置工作区
比较文件差异
- 将工作区中的文件和暂存区进行比较
$ git diff a.txt #git diff [文件名]
- 将工作区中的文件和本地库历史记录比较
$ git diff 93d9186 abc.txt #git diff [本地库中历史版本] [文件名]
- 不带文件名比较多个文件
git diff
Git分支操作
创建分支 dev
$ git branch dev #git branch [分支名]
切换分支 dev
$ git checkout dev #git checkout [分支名]
git checkout 命令加上 -b 参数表示创建并切换,相当于上面两条命令
$ git checkout -b dev
查看当前分支
$ git branch -v
git branch 命令会列出所有分支,当前分支前面会标一个*号
合并分支
第一步:切换到接受修改的分支(被合并,增加新内容)上
$ git checkout master #git checkout [被合并分支名] 切换到主分支上
第二步:执行 merge 命令
$ git merge dev #git merge [有新内容分支名] 将dev分支合并到master分支上
解决冲突
- 冲突的表现
<<<<<<<HEAD
分支合并之前的文件内容
=======
其它分支下修改的内容
>>>>>>> psr/psr-02
- 冲突的解决
- 编辑文件,删除特殊符号
- git add [文件名]
- git commit -m "日志信息"(注意:此时 commit 一定不能带具体文件名)
Git远程仓库
创建远程仓库
- 直接在网页上创建
创建远程库地址别名
$ git remote -v #查看当前所有远程地址别名
$ git remote add [别名] [远程地址] #添加远程地址别名
克隆
- 完整的把远程库下载到本地
- 创建 origin 远程地址别名
- 初始化本地库
$ git clone [远程仓库地址]
推送
$ git push [别名] [分支名]
拉取
$ git pull [远程库地址别名] [远程分支名] #将远程主机的最新内容拉下来后直接合并
git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
$ git fetch [远程库地址别名] [远程分支名] #是将远程主机的最新内容拉到本地
$ git merge [远程库地址别名/远程分支名]
开发步骤
1、创建分支 git branch dev
2、切换分支 git checkout dev
3、进行开发
4、代码提交 git add . git commit -m "msg"
5、切换回主分支 git checkout master
6、合并 $ git merge dev
7、删除分支 $ git branch -d dev
开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支
$ git checkout dev
$ git pull
$ git checkout master
$ git merge dev
$ git push -u origin master
当master代码改动了,需要更新开发分支(dev)上的代码
$ git checkout master
$ git pull
$ git checkout dev
$ git merge master
$ git push -u origin dev
遇到的问题:在本地创建分支后,直接推送,会因为远程没有这个分支报错
解决方法:git push -u origin dev(远程分支名)
在项目根目录添加 .gitignore 文件或者编辑 .git\info\exclude 文件,对提交内容进行过滤
Commit message 代码提交规范
Commit message 包括三个部分:Header,Body 和 Footer
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
Header
<type>(<scope>): <subject>
type(必须)
用于说明git commit的类别,只允许使用下面的标识。
- feat:新功能(feature)。
- fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
- fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
- to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix
- docs:文档(documentation)。
- style:格式(不影响代码运行的变动)。
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)。
- perf:优化相关,比如提升性能、体验。
- test:增加测试。
- chore:构建过程或辅助工具的变动。
- revert:回滚到上一个版本。
- merge:代码合并。
- sync:同步主线或分支的Bug。
scope(可选)
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
subject(必须)
subject是commit目的的简短描述,不超过50个字符。
fix(DAO):用户查询缺少username属性
feat(Controller):用户查询接口开发

浙公网安备 33010602011771号