在上一篇【Git】介绍、与SVN对比、支持的通信协议 我们介绍了 Git 及它支持的通信协议,这篇我们就来看看如何使用Git。
1.Git 核心命令
git 客户端安装(无脑下一步就行):
其它客户端:https://tortoisegit.org/download/
1.1 配置管理
在刚装完git的需要配置 email 和 name,然后才能使用 Git,那怎么配置呢?
#查看所有配置信息
git config -l
#查看系统级别配置(git安装目录下etc)
git config --system --list
#查看全局级别配置(当前用户之下表示的是全局级别的)
git config --global --list
#查看仓库级别配置(当前仓库级别下的.git>config文件)
git config --local --list
#添加配置
git config --global user.name "yourusername"
git config --global user.email "youremail@email.com"
#删除配置
git config --unset user.name
注:覆盖优先级为local > global > system。优先读取local,其次是global,最后是system。
1.2 本地初始化Git仓库
如何初始化一个 Git 本地仓库 ?
#当前目录初始化为 git 本地仓库(在同级目录下会出现一个隐藏的.git文件)
git init <directory>
#基于远程仓库克隆至本地
git clone <remote_url
1.3 本地添加
如何将工作空间的文件添加到暂存区?
#添加指定文件到暂存区
git add <fileName>
#添加指定目录至暂存区
git add <directory>
#添加所有
git add -A
#将指定目录及子目录移除出暂存区(注:本地文件还在)
git rm --cached <target> -r
#查看提交状态。如果还未提交到暂存区的文件会标红,在暂存区的文件会标绿。
git status
#添加勿略配置文件 .gitignore
如果我们不想让某个文件被git管理起来,所以如何让 git 忽略这个文件呢?
在仓库的根目录下创建一个.gitignore 文件,写入不想让git管理的文件。两点注意
- .gitignore本身就需要忽略,所以此文件也要写进去
- .gitignore 文件中可以使用“#”字符开头表示注释,文件夹路径是用“/”字符,文件名可以使用通配符“*”,另外还可以使用“!”字符表示排除。比如 * .class
- .gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交
- 每一个文件夹沟可以创建自己的“.gitignore”文件,如果它上层的文件夹也有“.gitignore”文件,这个文件夹也会受到它的影响
1.4 本地提交
如何将暂存区的文件提交到本地仓库?
#提交指定文件到本地仓库
git commit <fileName>
#全部提交
git commit -a
#-m编写提交注释(注:如果在commit命令中指定了-m,那么就不会再弹出vim让写提交注释了)
git commit <fileName> -m <注释>
#快捷提交至本地仓库
git commit -am '快添加与提交全部暂存区文件'
#版本回退(这个id可以根据git log查看日志信息去找到)
git reset --hard commitid
1.5 日志管理
如何查看我当前库的历史提交信息?
#查看当前分支下所有提交日志
git log
#查看当前分支下所有提交日志
git log {branch}
# 单行显示日志
git log --oneline
# 比较两个版本的区别
git log master..experiment
#以图表的方式显示提交合并网络
git log --pretty=format:'%h %s' --graph
1.7 分支管理
如果我现在有多个开发人员,开发不同模块,都在master上写吗?
#查看当前分支, -avv查看远程分支
git branch [-avv]
#基于当前分支新建分支
git branch <branch name>
#基于提交新建分支
git branch <branch name> <commit id>
#切换分支
git checkout <branch name>
#删除分支(注:删除时必须在其他分支上)
git branch -d {dev}
#合并分支(比如将要将dev分支的内容合并到master分支,那么要在master分支执行该命令)
#注: 如果因冲突导致自动合并失败,此时 status 为mergeing 状态。需要手动修改后重新提交(commit)
git merge <merge target>
分支规范:
master分支:主分支。保持稳定
- 不允许直接往这个分支提交代码,只允许往这个分支发起 merge request
- 只允许 release 分支和 hotfix 分支进行合流 , 所有在 Master 分支上的 Commit 应该Tag
develop分支:开发分支。相对稳定的分支,用于日常开发,包括代码优化、功能性开发。
feature分支:特性分支。
- 从develop分支拉取,用于下个迭代版本的功能特性开发。
- 功能开发完毕合并到develop 分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留。
release分支:发布分支。
从develop分支拉取,用于回归测试,bug修复
发布完成后打tag并合入master和develop, (注:一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支)
hotfix分支:热更新分支。
从develop分支拉取,用于紧急修复上线版本的问题
修复后打tag并合入master和develop
1.8 tag 管理
Commitid不容易记住,能不能用一种比较独特的方式去记住每个版本?答:Commitid相当于IP,Tag相当于域名。
#查看当前仓库的标签列表
git tag
#创建分支
git tag <tag name> <branch name>
#删除分支
git tag -d <tag name>
1.9 远程仓库
本地仓库说完了,那如果我不同地区的人要合作开发怎么搞?
#查看远程配置
git remote [-v]
#添加远程仓库地址(注:远程仓库一般命名为origin,不同的远程仓库需要配置不同的名字; url一般多采用http协议)
git remote add <github name> <url>
#删除远程地址
git remote remove <github name>
#上传新分支至远程
git push -u <github name> <branch name>
#将本地分支与远程建立关联
git branch --track --set-upstream-to=<github name>/<remote branch> <local branch>
#直接使用git push 时只会上传的到一个远程仓库的一个分支,是上面 --track 设置的仓库和相应分支
git push
# 拉取代码到本地
git clone <url>
git clone <url> <filepath>
#提取远程仓库(如果服务器有修改,不会到本地)
git fetch
#合并冲突(如果只是本地或远程一端修改的话,就不会冲突)
git merge
# git pull(更新拉取) = git fetch + git merge
git pull <url>
无论是推送还是拉代码,需要有这样一个权限,也就是说你目前使用的这台电脑是否安全,如果不安全,人家不会让你去推送,而github采用的是RAS加密方式通讯:
- 在本地中生成一个 ssh key
ssh-keygen -t rsa -C youremail.com # (输入后一直回车即可完成)
- 把这个key告诉github/码云。Settings -> SSH and GPG keys --> New SSH key --> 将公钥粘贴并保存
2.工具使用 Git
一般我们在实际开发更多是用现成IDE自带的GIT工具或者图形化工具去操作Git
- IDEA操作GIT:IDEA中的Git操作,看这一篇就够了!
- 可视化工具 SourceTree:这里放上我自己用的破解版(链接:https://pan.baidu.com/s/1i82Fkeb5ZzuLtdarWSlVDw 提取码:rubp)