git学习使用笔记
前情提要:下载安装并配置git
进入网站https://git-scm.com/下载安装,然后在命令行执行配置:
git config --global user.name "学编程的鱼丶"
git config --global user.email "xxx@xxx"
#选择执行(出现中文乱码执行):
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
set LESSCHARSET=utf-8 //windows配置环境变量
//export LESSCHARSET=utf-8 linux bash配置环境变量
检查信息是否写入成功
git config --list
一.常用的开发分支
master 分支 : 主分支,不轻易改动,主要做正式发版使用,一般发版的包都从 master 分支中构建
release 分支 : 预发布分支,是在正式发版前的测试使用分支,测试使用的包都从此处构建,测试完成后合并到 master 分支进行发版
develop 分支 : 开发分支,每个版本的所有需求开发所在分支
feature 分支 : 具体的需求开发分支,因为开发大都是团队协作,开发成员负责自己的需求开发时,一般建议从 develop 分支中重新拉一条分支出来,作为成员自己的开发分支,最后再合并到 develop 分支中,所以 feature 分支一般会有多个
hotfix 分支 : 紧急修复分支,如果线上版本遇到bug,则一般建议从 master 分支拉出一条分支,作为紧急修复分支,在 hotfix 测试没有问题后,合并到 master 进行紧急发版
二.常用的Git管理流程
从上述常用分支介绍中,我们可以大致了解团队开发时的Git管理流程,此处我们再详细介绍一下常用的管理流程。
Step 1 : 项目创建 master 分支。
Step 2 : 从 master 分支中拉出一条 develop 分支,作为所有的开发需求的汇总分支。
Step 3 : 进行具体的需求开发时,每位开发成员从 develop 分支中拉出一条分支,作为自己的 feature 分支进行具体的需求开发。
Step 4 : 开发完成后的 feature 合并到 develop。
Step 5 : 所有的需求都开发完成后,从 develop 分支中拉出一条 release 分支,提供给 QA 进行测试。不过,有时为了效率,release 分支可能会被省略,直接使用 develop 分支代替。但是如果项目开发时会出现交叉开发,那么个人认为 release 分支的存在还是很重要的。例如本期版本需求还未测试完毕,进行发版,下一期需求就要进行开发,则此时 develop 分支中可能就会混入下期需求代码,那么 release 分支的存在就很有必要了。
Step 6 : 测试完成后,release 分支合并到 master 分支进行发版,并且每次发版都需要打标签,方便后续对历史版本复盘。
Step 7 : 如果线上版本出现紧急bug,则从 master 分支拉出一条 hotfix 分支,对 bug 进行紧急修复,测试完成后将 hotfix 分支合并到 master 进行紧急发版,同时也需合并到 develop 分支。
三.基础用法
git add xxx
git commit -m 'xx'
git pull
git push
四.基础命令说明
git init 创建git版本库
git clone xx/xx.git 克隆远程仓库到本地
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git status 查看状态
git add . 将所有文件添加到暂存区
git add xx 将单个文件添加到暂存区
git commit -m 'xx' 把暂存区文件提交到当前分支上
git commit -am 'xx' (git add .和git commit -m 'xx'的结合)
git pull 拉取远程最新代码并更新本地代码
git push 将当前分支上的代码上传到远程git仓库
git diff xx 查看文件的改动
cat xx 查看文件内容
git log 显示所有提交日志
git log –pretty=oneline 按单行显示所有提交日志
git reflog 获取所有提交日志的版本号
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上上一个版本(以此类推)
git reset --hard HEAD~100 回退到前100个版本(100为任意正整数)
git reset --hard HEAD xxx 回退到某一个版本(xxx为版本号)
git reset --soft HEAD~ 只移动HEAD 的指向,但并不会将快照回滚到暂存区域;相当于撤消了上一次的提交(commit)
git checkout -- xx 撤销工作区的修改(未add前修改的内容,撤销到与版本库一样;add后再修改的内容,撤销到add处)
rm xx 配合git add、git commit可以实现彻底删除文件(本地和远程)
五.本地仓库和远程仓库同步
本地已经git init创建过新仓库,若无仓库可git clone克隆远程仓库到本地
第一步:创建SSH Key(id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人)
ssh-keygen -t rsa -C "xxx@xxx"
第二步:登录github,打开“settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容,并点击创建;
第三步:然后在右上角找到“New repository”创建一个新的仓库;
第四步:本地代码库添加到远程仓库
git remote add origin https://github.com/xxx/xx.git
第五步:将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了
git push -u origin master
六.创建与合并分支(dev分支等)
1.查看分支:
git branch
2.创建分支:
git branch xx
3.切换分支:
git checkout xx
4.创建+切换分支:
git checkout –b xx
5.把新建的分支推动到远端
git push origin xx
6.建立远端分支和本地分支的关联
git branch --set-upstream-to=origin/xx
7.验证创建分支是否成功
git pull
出现Already up to date ,代表创建成功
8.合并某分支到当前分支:
git merge xx
9.合并某分支到当前分支,禁用“Fast forward”模式:
git merge --no-ff -m "注释" xx //采用这种方式,删除分支后,git log还会有分支信息
10.删除分支:
git branch –d xx
七.bug分支
假设现在存在主分支和dev开发分支,主分支出现bug
第一步:先把正在开发的dev分支代码隐藏
git checkout dev
git stash
第二步:在主分支下创建bug分支并切换
git checkout master
git checkout -b bug
第三步:在bug分支下,修改bug;并提交代码
git add xxx;git commit -m 'xx'
第四步:切换到主分支合并bug分支并删除分支
git checkout master
git merge --no-ff -m "修复bug合并到主分支" bug
git branch -d bug
第五步:切换到dev分支,查看隐藏区列表,并删除隐藏区恢复代码;最后提交dev分支的开发代码
git checkout dev
git stash list
git stash pop
git add xxx
git commit -m 'xx'
第六步:切换到主分支并合并dev分支,有冲突解决冲突代码文件;最后提交代码到远程仓库
git checkout master
git merge dev
git add xxx
git commit -m 'xx'
git push
八. 忽略,取消忽略,找到忽略本地文件(针对.gitigore忽略不了的文件)
忽略文件:
git update-index –assume-unchanged xx
取消忽略文件:
git update-index –no-assume-unchanged xx
但是忽略的文件多了,想找出所有被忽略的文件,暂时找到下面的办法:
git ls-files -v | grep '^h '
提取文件路径,方法如下:
git ls-files -v | grep '^h ' | awk '{print $2}'
所有被忽略的文件,取消忽略的方法,如下:
git ls-files -v | grep '^h' | awk '{print $2}' |xargs git update-index --no-assume-unchanged