git使用流程及合并分支

首先要明白四个空间:远程仓库,本地仓库,本地缓存区,本地工作区;

远程仓库:

  1. 该仓库是一个集中的数据仓库,正常情况下,所有参与开发的人员的代码最后都会提交到该仓库的自己的分支上,再由具有合并权限的人员来合并所有分支;

本地仓库:

  1. 一般来说,本地仓库是由开发人员通过clone复制远程仓库中的某个分支的数据到本地而产生的,但git不是集中式的版本控制,而是分布式的版本控制,他们的区别就是,分布式版本控制中每一个仓库都能具有远程仓库的作用,而集中式的版本控制中远程仓库是不能被其他参与开发的人备份的;

本地缓存:

  1. 在本地修改数据后(一般是指我们在编辑器中修改某个文件),git监测到该数据与本地数据仓库的数据不一致,会提示将该修改增加(add)到缓存区,缓存区中的文件可以用来与本地仓库中的文件进行比较(difftool),这个用处目前感觉主要用于当我们修改很多文件时,最后不记得自己修改了那些文件,如果没有缓存区,我们直接提交的话,很容易会导致很多疏忽。我们在编辑器中修改了文件后(本地工作区),本地缓存中不包含我们的修改的,只有当我们把本次的修改add到缓存区的时候,缓存区中才有本次的修改,这表明我们的每一次修改都必须手动add到本地缓存中才能在使用commit命令时将其添加到本地仓库。

本地工作区:

  1. 也就是我们的编辑器的空间;

分支命名规则

1.主分支:master
2.CICD: autoDeploy
3.开发分支:develop
4.功能分支:feature-分支名称/功能名称 (例: git checkout -b feature-autoMLlist)
5.分支发布:release-日期
6.bug 分支修复:bugfix-日期

分支开发节点

  1. 鉴于此后在代码管理流程上,需按严格要求执行,所以在每日开发的功能或者bug必须于当日完成以及提交pull request,便于代码review

开发流程

在develop分支,多人需要开发不同的功能,这里就会用到feature分支。团队中的每个人都从Github克隆一个项目,然后新建自己的feature分支。

  • git clone xxxx.git
  • git checkout develop
  • git checkout -b feature-×× develop # 从develop分支新建并检出feature分支)

    这里可以进行一些功能开发,并不断的add和commit

  • git checkout develop # 切换回develop分支
  • git pull origin develop # 更新远端代码,看develop分支是否有更新(无更新)
  • git checkout feature-×× # 切换回feature分支
  • git rebase develop # 合并develop分支到feature分支,并解决冲突(无冲突)
  • git checkout develop # 切换回develop分支
  • git merge —no-ff feature-hu # 合并feature分支到develop分支
  • git push origin develop # 推送develop分支到远端

下面遇到冲突解决

对于团队其他成员开发,操作如下,并打算在上面提交后进行push操作
  • git checkout -b feature-zz develop # 从develop分支新建并检出feature分支

    这里可以进行一些功能开发,并不断的add和commit

  • git checkout develop # 切换回develop分支
  • git pull origin develop # 更新远端代码,看develop分支是否有更新(有更新)
  • git checkout feature-×× # 切换回feature分支
  • git rebase develop # 合并develop分支到feature分支,并解决冲突(有冲突)

    这里需要进行冲突解决

  • git add . # 解决完冲突之后执行add操作
  • git rebase —continue # 继续刚才的rebase操作
  • git checkout develop # 切换回develop分支
  • git merge —no-ff feature-×× # 合并feature分支到develop分支(无冲突)
  • git push origin develop # 推送develop分支到远端

我们有时会遇到这样的情况,正在开发分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,可以使用以下方法:

1.git stash

  1. 保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释

2.git stash list

  1. 显示保存进度的列表。也就意味着,git stash命令可以多次执行。

3.git stash pop [–index] [stash_id]

  1. git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
  2. git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
  3. git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
  4. 通过git stash pop命令恢复进度后,会删除当前进度。

4.git stash apply [–index] [stash_id]

  1. 除了不删除恢复的进度之外,其余和git stash pop 命令一样。

5.git stash drop [stash_id]

  1. 删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。

6.git stash clear

  1. 删除所有存储的进度。

git merge和git rebase的区别

  1. 1.使用git merge合并分支,解决完冲突,执行addcommit操作,此时会产生一个额外的commit
  2. 2.使用git rebase合并分支,解决完冲突,执行addgit rebase --continue,不会产生额外的commit。这样分支上不会有无意义的commit

如何在Github上创建、删除分支

  1. 1、在本地创建新分支:git branch newbranch
  2. 2、在本地切换到新分支:git checkout newbranch
  3. 3、将新分支推送到githubgit push origin newbranch
  4. 4、在本地删除一个分支:git branch -d newbranch
  5. 5、在Github远端删除一个分支:git push origin :newbranch

—no-ff参数

  1. 默认情况下,Git执行"快进式合并"fast-farward merge),会直接将当前分支指向被Merge分支,使用--no-ff参数后,会执行正常合并,在当前分支上生成一个新节点。为了保证版本演进的清晰,希望采用这种做法.

Commitizen

  1. $ npm install -g commitizen
  2. > 然后,在项目目录里,运行下面的命令,使其支持 Angular Commit message 格式。
  3. $ commitizen init cz-conventional-changelog --save --save-exact
  4. > 以后,凡是用到git commit命令,一律改为使用git cz。这时,就会出现选项,用来生成符合格式的

commit验证信息规则


http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

你可能感兴趣的:(git)