Merge branch 'iss53'
Conflicts:
index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#
# Changes to be committed:
# modified: index.html
#
Git & Svn 区别
Svn: 集中化版本控制系统
Git: 分布式版本控制系统
svn checkout http://...
git clone http://...
版本库
.git
,这个就是 Git 的版本库。本地操作
Git 的设计目标(特点)
Git 基本工作原理,如何进行版本控制?
Svn 记录差异
Git 记录快照
快照的创建
首次提交
git add
暂存操作:为工作区中已修改的文件创建快照git commit
提交版本库再次提交
分支的原理
.git/refs/heads
master
,.git/refs/heads/master
分支创建
.git/refs/heads
中创建了testing
文件HEAD
的指针区分所在分支,HEAD
总是指向当前所在的分支git branch
命令仅仅 创建 一个新分支,并不会自动切换到新分支中去分支切换
HEAD
就指向testing
分支分支总结
实际场景模拟
开发 2.0 版本,并进行一些功能提交,线上版本依旧指向发版时的提交对象
线上版本紧急 BUG
切换回
master
分支git stash
或者提交操作git commit
master
分支中进行代码开发,master
分支的代码都是合并的别的分支,以此保证master
分支的稳定性(线上版本的稳定性)新建紧急修复
hotfix
分支,在该分支上工作直到问题解决,并提交修改。master
合并hotfix
分支,测试部署上线删除
hotfix
分支,因为我们已经不再需要它了——master
分支已经指向了同一个位置回到开发分支继续工作
hotfix
分支所做的修改,并没有合并到开发分支上git merge master
命令将master
分支合并入 开发分支(推荐)master
分支2.0 开发测试完成,将开发分支的代码合并到主分支上,部署上线
master
分支所在提交对象并不是iss53
分支所在提交对象的直接祖先,Git 会使用两个分支的末端所指的快照(C4
和C5
)以及这两个分支的公共祖先(C2
),做一个三方合并这种提交被称为合并提交,因为他不止有一个父提交对象。
合并冲突
如果我们在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。
此时 Git 做了合并,但是没有自动地创建一个新的合并提交。Git 会暂停下来,等待你去解决合并产生的冲突。
确定之前有冲突的的文件都已经暂存了,输入
git commit
来完成合并提交。默认情况下提交信息看起来像下面这个样子:如果你觉得上述的信息不够充分,不能完全体现分支合并的过程,你可以修改上述信息,添加一些细节给未来检视这个合并的读者一些帮助,告诉他们你是如何解决合并冲突的,以及理由是什么。
中断一次合并
我们可能不想处理冲突这种情况,可以通过
git merge --abort
来简单地退出合并git merge --abort
选项会尝试恢复到运行合并前的状态。忽略空白
-Xignore-all-space whitespace
:在比较行时 完全忽略 空白修改-Xignore-space-change whitespace
:将一个空白符与多个连续的空白字符视作等价的变基
merge
一样,用来合并分支merge
合并时会产生很多无用的 Merge 信息,尤其是多分支开发合并时,时间长了之后整个项目提交信息会非常杂乱。运程仓库
下载远程仓库
git clone 仓库地址
git pull
拉取远程仓库代码git push
推送本地仓库至远程仓库分支开发工作流
master
线上分支:绝对稳定,此版本代码可以随时发布线上,总是合并test
测试分支或紧急修复分支代码。test
测试分支:提交测试线的代码,总是合并develop
测试分支代码。develop
开发分支:共享分支,总是合并本地分支代码。临时、修复、功能分支:本地分支,各功能开发,开发完成合并入开发分支。
打标签
git tag <tagname>
给当前分支打标签,也可以在后面指定一个 commit id,给对应的提交对象打标签。git tag -a <tagname> -m "blablabla..."
可以指定标签信息。git tag
可以查看所有标签。git push origin <tagname>
可以推送一个本地标签。git push origin --tags
可以推送全部未推送过的本地标签。git tag -d <tagname>
可以删除一个本地标签。git push origin :refs/tags/<tagname>
可以删除一个远程标签。实际开发流程
git clone
下载仓库develop
分支创建本地分支,开发过程中针对每个功能点进行提交记录。git pull
,拉取开发分支最新代码。git rebase develop
合并开发分支的代码,如有代码冲突,解决后需要重新提交合并对象。git merge
合并本地分支,使用git push
推送远程仓库。git pull
拉取最新代码。git merge develop
合并开发分支代码,使用git push
推送远程仓库,部署测试。master
分支,使用git pull
拉取最新代码。git merge test
合并测试分支代码,使用git push
推送远程仓库,部署上线。master
分支新建紧急修复分支,修复问题直到完成。master
分支合并紧急修复分支,推送远程仓库并部署。Commit Message 规范
Header
Body
对本次 commit 的详细描述,可分多行
Footer
配置 Commit 提示工具
首先,全局安装工具:
生成配置文件:
提交时使用
git cz
代替git commit
⚠️ 注意要使用命令行进行代码提交,不要再使用 vscode 中的 Git 提交功能 (这个还是
git commit
)为项目加入提交信息检查
每次提交版本时自动检查提交信息是否符合规范
在项目根目录执行,生成配置文件
为项目增加提交时 Eslint 检查和修复
⚠️ 只会校验和修复暂存区中的文件,如果想修复本地,可以执行
npx eslint --fix --ext .js,.jsx,.ts,.tsx,.vue src
.lintstagedrc
配置
.huskyrc
,增加预提交钩子配置完成后,提交代码时会自动做 Eslint 检查和修复,此步骤如果无法通过则需要重新提交代码。