[toc]
# Git
## .git 目录是干什么用的?
每个本地的仓库中都会有一个 .git 目录,目录中保存了 git 仓库管理的相关信息。
## git常用指令?
git init :将所在目录初始化为 git 仓库(创建 .git 目录)
git clone :从 git 服务器克隆仓库代码到本地
git add :将工作区中的代码添加到暂存区
git commit :将暂存区中的代码提交到本地仓库成为一个历史版本
git push:将本地仓库提交到服务器,以便和其他人共享代码
git merge:合并分支
git branch:操作分支
git checkout:切换分支
git remote -v:查看本地仓库对应的服务器仓库的地址
等等
## fork?pull request 干什么用的?
![](https://img.kancloud.cn/8a/d6/8ad668553338262af00f963cb5fac6ab_2860x566.png)
我们可以浏览服务器上别人的开源仓库的代码,但不能修改,如果想要修改,我们需要先 fork 一份到自己的仓库中,然后修改之后再向对方发送 pull request 请求,当对方同意了,就会将我们修改的合并到对方的仓库中
fork:在服务器上将别人的仓库复制到自己的仓库中成为自己的,因为别人服务器上的代码我们只能下载无法修改,所以如果要修改我们需要复制一份成为我们自己的仓库,然后就可以下载我们自己的到本地然后修改。
pull request:我们自己的仓库修改了之后,如果要提交给原服务器上的仓库,我们需要发送一个 pull request 请求,当对方同意了之后,就会把我们服务器上修改了的代码合并到他的仓库中。
## 什么是冲突?如何解决冲突?
当多个人修改了同一个文件中的同一行代码时,这时在提交到服务器上进行合并时就会发生冲突(服务器不允许这种合并,因为会发生互相覆盖的问题)。
解决冲突:
1. 先和对方程序员进行沟通,确定合并之后应该是什么样
2. 删除多余的代码,保留合并之后的最终代码
3. 执行 git resolve 并提交最终代码
## git flow 是什么?主要由几个分支组成?
git flow(git 工作流)
如果项目成员胡乱的提交代码,肯定不利于代码的管理和维护,所以我们需要一个规范来让团队成员 “按规矩提交代码”,这样便于 git 上代码的管理。
Vincent Driessen 提出了一种 git 的管理方式:
![](https://img.kancloud.cn/28/5c/285c68d8f2ad2a12f6ecb821605f769e_1320x802.png)
在 git 仓库中创建以下分支用来管理代码:
master :生产环境分支,这个分支中的代码就是当前线上正在跑的代码。
develop:开发分支,这个分支上的代码就是当前正在开发的代码
feature:特性分支,每当要开发一个新功能时就创建一个特性分支,然后在这个特性分支上开发新功能,功能开发完之后,合并回 develop 分支
hotfix:修改分支,当线上的程序发现 BUG 时,就创建一个 hotfix 分支,然后在这个分支上修改 BUG ,BUG 修改好之后合并到 master 和 develop 分支
release:发布分支,每当要发布新的版本时就新建一个 release 分支,然后发布这个分支的代码,测试通过没有问题之后,合并到 master 和 develop 分支上
## 工作区?暂存区?本地仓库?服务器?
服务器:一个公共的电脑搭的服务器(github、gitee、gitlab等),把本地仓库提交到服务器上就可以和其他人共享仓库代码了。
本地仓库(每人电脑上的仓库):本地 git 仓库中分为三个区域:工作区、暂存区、本地仓库。
工作区:我们当前代码所在的目录,在这里编辑代码。
暂存区和本地仓库是不可见的,保存在 .git 目录中。
暂存区:临时保存代码修改的地方。
仓库:已经确定的修改版本,代码必须先放到暂存区才能到仓库。
将代码提交到本地仓库的流程:
工作区 --- git add . --> 暂存区 -- git commit -m '注释' --> 本地仓库
本地代码提交到服务器的流程:
本地仓库 --- git push --> 提交到服务器
## gitee、github、Gogs、gitlab 是干什么用的?
都是 git 的服务器。
公开的代码托管平台:
github :国外的免费的 git 服务器代码托管平台。
gitee:国内的git 服务器代码托管平台。
私搭的公司内部代码托管平台:有些不想把公司内部的代码公开,又不想在平台上花钱,所以就自己在公司内部搭建一个自己用的平台:
Gitlab:一个功能强大的代码托管服务器软件
Gogs:一个精简的 git 代码托管服务器软件