一,Git基本命令
Git工作目录下对于文件的修改(增加,删除,更新)会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化。
工作区:Git初始化的那个目录就是工作区。
Git基本命令:
-
初始化本地仓库
git init要让Git管理目录必须先初始化目录,当出现
.git的隐藏文件的时候就说明初始化成功了。 -
查看本地仓库状态
git status -
将文件添加到暂存区
git add 文件名 git add . #添加当前目录下所有文件 -
将暂存区文件删除
git rm --cached 文件名 #删除处于暂存区的文件 -
将文件添加到本地仓库
git commit -m '信息' 文件名 #将暂存区的文件提交到本地仓库,如果不写文件名,默认将全部处于暂存区的文件提交到本地仓库 -
查看历史版本信息
git reflog #查看本地仓库信息-
查看详细的本地仓库信息
git log #查看详细的版本信息一般会加上一堆参数来简化这个信息,同时加上命令的别名简化。
常用选项
--all显示所有分支--pretty=online将提交信息显示未一行--abbrey-commit让输出的commitld更加简短--graph图形化显示可以在配置文件中设置来简化这个命令。
-
-
切换版本
git reset --hard 版本号 #切换git版本号这个版本号通过
git reflog命令来查看。1dd984d0就是版本号。查看已删除的记录:
git reflog来查看已经删除的记录。
二,Git的分支
几乎所有的版本控制系统都支持分支。使用分支意味着你可以把你的工作从主线上分离开来进行重大的bug修改,开发新功能。
2.1 Git分支相关命令
- 查看本地分支
```bash
git branch
```
-
创建新分支
git branch 新分支名 -
切换分支
git checkout 分支名 git checkout -b 分支名 #创建分支并切换到该分支 -
合并分支
在Git中,分支合并有两种不同的实现方式:
-
变基:把一个分支的修改合并到当前分支上。
git rebase 分支名变基解释图
git rebase的好处是让我们的提交记录非常清晰,不会出现分支的情况。
git rebase的坏处是大部分情况下,rebase 的过程中会产生冲突的,此时,就需要手动解决冲突,然后使用
git add、git rebase --continue的方式来处理冲突。 -
分支合并
git merge 分支名分支合并解释图
不同于
git rebase的是,git merge在不是fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似**Merge branch 'xxx' into 'xxx'**的一条提交信息。
-
-
删除分支
git branch -d 要删除的分支 #删除分支时需要各种检查。 git branch -D 要删除的分支 #不做任何检查强制删除分支注:不能删除当前所在分支,只能删除其他分支。
2.2 分支合并的冲突问题
冲突原因: 多个分支在同一个文件的同一个位置进行了不同的修改,Git无法替我们决定用哪个。
解决冲突方法:在合并失败后需要解决冲突的文件内容会变成:
<<<<<<< HEAD
当前分支修改的代码块
========
hot-fix分支修改的代码块 > > > > hot-fix
三方合并:在合并两个分支时,git会检索两个分支共同的祖先,而后比较两个分支与主线节点,存在三种情况。
-
当两方都存在差异时,产生冲突
-
当只有a分支存在差异时,直接使用有a分支的commit
-
双方不存在差异则不处理
2.3 分支在开发中使用原则与流程
在开发过程中,一般有如下分支使用原则与流程:
-
master(生产)分支
线上分支,主分支,中小规范项目作为线上运行的应用对应的分支。
-
develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期的上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支准备上线的。
-
feature/xxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
-
hotfix/xxx分支
从master派生的分支,一般作为线上修复bug使用,修复完后需要合并到master,test,develop等分支中。
大致流程图: