[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 干什么用的?

我們可以瀏覽服務器上別人的開源倉庫的代碼,但不能修改,如果想要修改,我們需要先 fork 一份到自己的倉庫中,然后修改之后再向對方發送 pull request 請求,當對方同意了,就會將我們修改的合并到對方的倉庫中
fork:在服務器上將別人的倉庫復制到自己的倉庫中成為自己的,因為別人服務器上的代碼我們只能下載無法修改,所以如果要修改我們需要復制一份成為我們自己的倉庫,然后就可以下載我們自己的到本地然后修改。
pull request:我們自己的倉庫修改了之后,如果要提交給原服務器上的倉庫,我們需要發送一個 pull request 請求,當對方同意了之后,就會把我們服務器上修改了的代碼合并到他的倉庫中。
## 什么是沖突?如何解決沖突?
當多個人修改了同一個文件中的同一行代碼時,這時在提交到服務器上進行合并時就會發生沖突(服務器不允許這種合并,因為會發生互相覆蓋的問題)。
解決沖突:
1. 先和對方程序員進行溝通,確定合并之后應該是什么樣
2. 刪除多余的代碼,保留合并之后的最終代碼
3. 執行 git resolve 并提交最終代碼
## git flow 是什么?主要由幾個分支組成?
git flow(git 工作流)
如果項目成員胡亂的提交代碼,肯定不利于代碼的管理和維護,所以我們需要一個規范來讓團隊成員 “按規矩提交代碼”,這樣便于 git 上代碼的管理。
Vincent Driessen 提出了一種 git 的管理方式:

在 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 代碼托管服務器軟件