这里写目录标题
在工作中一般远程仓库有
master
和develop
分支,日常开发在develop
分支中进行
1.一般来说开发流程如下:
1.首次 克隆代码
git clone http://xxx.xxx.git
---------不是首次的话 拉取新的代码git pull origin develop
2.
git branch --all
查看当前分支
3.如果在
develop
分支,从develop
创建新的本地分支git checkout -b develop-x develop
,或者转到自己的分支用于本地开发使用,如果不是第一次,就将新拉取的develop代码合并到自己的分支下git rebase develop
进行开发:
4.开发提交代码的流程
1)
git add .
将代码提交到暂存区
2)
git commit -m "描述"
将代码提交到历史区
5.将分支
push
到远端,在push之前先拉取develop
分支最新代码,本地merge
解决冲突,然后git push origin develop-x:develop-x
(冒号后面为远端分支的名称)
6.对于开发成员来说这一步一般在
gitLab
,创建合并请求,组长进行合并处理
2.git中分区的概念:
1.工作区:正在编辑的代码
2.暂存区:临时存储要生成版本代码的地方
3.历史区:存储的是生成的每一个版本代码
3.一般开发就在这三个区中进行转换常用的操作命令有:
1.提交到暂存区
git add .
2.提交到历史区git commit -m "摘要"
3.clone指定分支代码git clone -b dev https://xxx.git
4.回滚操作:
1)暂存区回滚到工作区git checkout -- .
2)当前暂存区 回滚到上一个暂存区git reset HEAD .
3)历史区中回退到某一个版本git rest --hard
大致流程
5.关于查看自己的操作信息
1)git status 查看当前的文件状态,红色代表在工作区,绿色代表在暂存区,没有文件说明已经同步到了历史区
2)git log 查看当历史区的提交记录
3)git reflog 查看所有历史记录 包含回滚后的
如下图:
4.还有一个比较重要的概念就是分支:
1.Master
分支:
一个项目的代码库应该有且只有一个主分支,所有提供给用户使用的正式版本
2.Develop
分支:
日常使用的开发分支。这个分支可以用来生成代码的隔夜版本,如果开发功能测试完成后,想正式对外发布,就在Master
分支上,对Develop
分支进行“合并”(Merge
)。
3.临时分支
1)功能分支:
它是为了开发某种特定的功能,从`Develop`分支上分出来,其命名规范:`feature-*`
2)预发布分支:
在发布到正式版本之前,我们可能需要有一个预发布版本进行测试。从Develop
分支上分出来其命名规范:release-*
3)修补Bug分支:
软件正式发布后,出现一些Bug
,这时就需要创建一个分支,来进行Bug
修复
,从master
分支中分出来, 其命名规范:fixbug-*
5.分支常用命令:
1.创建并切换到此分支 git checkout -b develop(新分支名) master(从这个分支进行分支)
2.删除分支 git branch -d develop(分支名)
3.查看分支 git branch --all
4.切换分支 git checkout develop
5.创建分支 git branch develop
6.与远程分支进行关联 git checkout -b develop origin/develop
6.tag的概念
tag是git版本库的一个标记,指向某个commit的指针。
tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 …这样的标签。
tag感觉跟branch有点相似,但是本质上和分工上是不同的:
tag 对应某次commit, 是一个点,是不可移动的。
branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。
tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支。
7.tag的基本使用流程
1. 创建
(1) 创建 tag 是基于本地分支的 commit,而且与分支的推送是两回事,就是说分支已经推送到远程了,但是你的 tag 并没有,如果把 tag 推送到远程分支上,需要另外执行 tag 的推送命令。
(2) git tag //创建本地tag
(3) git push origin //推送到远程仓库
(4) git push origin --tags //一次全部推送的话
以上是基于本地当前分支的最后的一个commit 创建的 tag
(5) 以某一个特定的提交为tag
git log --pretty=oneline //查看当前分支的提交历史 里面包含 commit id
git tag -a
2. 查看
(1) git show 查看本地某个 tag 的详细信息
(2) git tag 或者 git tag -l 查看本地所有 tag
(3) git ls-remote --tags origin 查看远程所有 tag
3. 删除
(1) 本地 tag 的删除:git tag -d
(2) 远程 tag 的删除:git push origin :
4. 检出标签
(1) git checkout -b
(2) 因为 tag 本身指向的就是一个 commit,所以和根据commit id 检出分支是一个道理。
7.rebase和merge的区别
最近看一个up主大翔的视频,我觉得他讲的很清晰,有兴趣的可以去搜索,这里附上他视频的截图
rebase:
在合并的时候会解决每一个当前分支后续commit的与要合并后续commit的冲突,如果每一个commit都有那就要一直解决多个冲突,最后会将当前分支的commit接在合并分支commit的后面
merge:
merge会对比出所有commit的冲突,然后一次性解决,然后解决后重新commit一个版本,此版本是解决过冲突的,所以后续如果在合并时,只需要与此commit进行对比。合并后的commit历史记录中会按照时间顺序进行排序。
如有错误请及时提出改正