Git
Git:分布式版本管理系统。
对于一个受Git管理的仓库,其各个状态的示意图如下:
- 工作区:本地项目目录。
- 暂存区:执行了add命令之后会将修改的代码存放到暂存区中。
- 本地仓库:执行了commit命令之后会将代码放入本地仓库中,即项目的**.git**目录下。
- 远程仓库:远程的代码仓库,只有在本地仓库中的代码执行了push之后才会提交到远程仓库。
常用命令
# 修改内容添加到暂存区
git add . or git add filename
# 将暂存区的内容提交到本地仓库,每次commit都会生成一个节点
git commit -m "message"
# 将本地仓库的内容合并到远程仓库
git push
# 查看提交日志
git log
# 查看某次提交到具体内容
git show commit_id
# 查看暂存区做的改动
git diff --cached
# 查看所有的改动
git diff
# 回滚操作
# 恢复到某一次提交
git reset commit_id
# 将某一次提交到修改恢复回去
git revert commit_if
# 查看可以恢复日志
git reflog
团队协作常用命令
# 创建新分支 - 不切换,head仍然在当前分支
git branch branch_name
# 根据当前分支创建新分支并且切换 - head指针指向新分支
git checkout -b branch_name
# 根据远程分支创建新分支并且切换
git checkout -b branch_name origin/branch_name
# 切换分支
git checkout branch_name
合并分支:merge和rebase
合并分支有merge和rebase这两种方式,这两种方式在最终生成的节点结构有所区别。
- merge
(feat02)$:git merge feat01
在执行merge命令时会创建新的节点,同时将别的分支的内容合并到该节点。
- rebase
(feat01)$:git rebase feat03
在feat01分支下执行feat03会将feat01分支的内容线性的合并到feat03后面。工作中建议常用这种!
使用rebase发生冲突时和merge不太一样,merge是一次性解决的,而rebase可能需要多次解决,每解决一次需要用
git rebase --continue
查看是否还有冲突需要解决,同时在解决的时候注意feat03才是当前分支,反倒是feat01是输入分支,这是因为是将feat01分支的内容连接在feat03分支的后面。
rebase结束之后会将本地的内容与远程的断裂开来,这个时候可以直接执行
git push -f
强制性的将本地的覆盖掉远程的。
将多次commit合并成一次
有时候可能自己的提交是同个功能上的修修补补,提交了多次commit,这个时候可以时候使用rebase将多个commit合并成一个。
# 查看提交记录
git log
# commit_id为要合并的多个commit之前的一个commit
git rebase -i commit_id
# 进入vim编辑模式
会有类似如下的内容
这里的pick就是要选择的命令格式,使用squash(可以缩写为s)可以将该commit和前一个commit合并。即假如要将C和B进行合并,则可以修改成
s xxxx C
!wq
保存后退出,会第二次进入vim编辑模式,修改提交信息后保存退出,就可以在日志中看到将commit合并成一个了。
参考:使用rebase将多个commit合并成一个
Git Workflow
Git Workflow指的是Git的分支模型,经典的为:
- master: 一般master分支不能够改动代码,是作为发布分支使用。
- develop:分支作为开发分支的主干,稳定的,最新的分支,用于合并其他分支。
- feature:新功能分支。
- release:发布分支,只能接受bug的修复。
- hotfix:紧急修复分支,在生产环境中出现了问题需要紧急修复。