GIT#
分区#
- 工作区
电脑里能看到的目录
- 暂存区
git add
后工作区修改过的文件会添加到暂存区
- 版本区
git commit
后,暂存区的文件会打包好作为一次提交放到版本区中
git 分区图例#
基本操作#
文件操作类#
- git add
xxxxxx.java
/folder
- git commit
-m
-v
- git stash
pop
- git reset
head
--hard
git stash/pop#
用于临时保存和回复修改,可跨分支
注:在未 add 之前才能执行 stash!(即未加入暂存区)
commit message 规范#
- feat (module):新功能(feature)。
- fix:修复 bug,可以是 QA 发现的 BUG,也可以是研发自己发现的 BUG。
- docs:文档(documentation)。
- style:格式(不影响代码运行的变动)。
- refactor:重构(即不是新增功能,也不是修改 bug 的代码变动)。
- perf:优化相关,比如提升性能、体验。
- test:增加测试。
- chore:构建过程或辅助工具的变动。
- revert:回滚到上一个版本。
- merge:代码合并 (冲突修复等)。
commit message 规范#
基本操作#
分支操作类#
- git checkout
-b
branch
- git merge
branch
- git rebase
branch
- git pull
remote
branch
- git push
remote
branch
merge 冲突#
<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
please contact us at [email protected]
</div>
>>>>>>> iss53:index.html
git merge --abort
#
merge 的特点#
优点#
- 使用简单
- 保留每一步的记录
- 保留源分支的原始记录
缺点#
- 保留每一步的记录
rebase#
同 merge 一样,主要功能也是合并分支,但是有很多不一样的细节
将提交到某一分支上的所有修改都移至另一分支上,就好像 “重新播放” 一样。
rebase#
在分支experiment
上执行git rebase master
, 将 C4
中的修改变基到 C3
上
rebase 和 merge 的区别#
1、使用难度
merge 较 rebase 更易于理解
2、对 git 操作历史的记录结果不一样
merge 会记录所有的合并操作,而 rebase 只会保留一个串行的提交记录。
merge 后的历史#
过多的 merge 记录#
rebase 后的历史#
分支协作#
Git Work Flow#
Git Work Flow#
分类#
- Git Flow
- GitHub Flow
- GitLab Flow
Git Flow#
以 Git 分支能力为基础的协作模型
分支类型#
- Master 最新的可发布版本
- Dev 最新的开发进度
- Realease 预发布分支
- HotFix 紧急 bug 修复的分支
- Feature 模块开发分支
一般流程#
- 从 master 新建分支 dev。
- 从 dev 新建各个 feature 分支,并在 feature 上开发。
- 开发完成的 feature 将会合并到 dev。
- 一个阶段的功能开发完成后将会新建出一个 release 分支用于测试等预发布。
- 在预发布期间发现的问题将在 release 中修改并把修改合并到 dev。6、release 测试通过后,合并到 master。并在 master
tag
一个版本记录。 - 期间线上发生 bug,需要从 master 中新建一个 hotfix 分支解决紧急问题,并合并到 master、dev 中。[特殊]
#
Github Flow#
基于 GitFlowa 新增fork
, Pull Request