一、Git
html
Git是一個開源、敏傑高效的分佈式版本控制工具。git
二、版本控制比較
macos
本地版本控制系統windows
1)本地版本控制系統
bash
2)如圖:
服務器
集中化的版本控制系統分佈式
1)集中式版本控制系統
工具
2)如圖
ui
集中化的版本控制系統spa
1)分佈式版本控制系統
2)如圖
一、倉庫的配置 git config
git config 命令專門用來配置或讀取相應的工做環境變量
Git 有三種級別的環境變量,它們分別是: 系統 Git 配置、當前用戶 Git 配置 和 當前項目 Git 配置
這些環境變量,決定了 Git 在各個環節的具體工做方式和行爲。
各個環境配置文件及查看命令以下:
一、系統配置 `/etc/gitconfig` 文件
/etc/gitconfig 是對全部用戶都廣泛適用的配置
可使用如下命令來讀寫 /etc/gitconfig 文件
$ git config --system [...]
二、當前用戶 `~/.gitconfig` 文件
~/.gitconfig 這個當前用戶目錄下的配置文件只適用於當前用戶
可使用如下命令來讀寫 ~/.gitconfig 文件
$ git config --global [...]
三、當前項目 `.git/config ` 文件
是當前項目下的配置文件,只適用於當前項目有效
可使用如下命令來讀寫 .git/config 文件
$ git config --local [...]
環境變量級別優先級: 當前項目 > 當前用戶 > 系統配置
複製代碼
二、Git 對命令設置別名
根據跟人喜愛,將經常使用命令設置別名
$ git config --global alias.cg "config --global"
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
複製代碼
使用 Git 平常開發的流程通常以下
# 初始化本地倉庫
$ git init [--bare]
# 將遠程倉庫拉去到本地
$ git clone [--bare] originPah
複製代碼
一、工做區與倉庫保持一致
二、文件增刪改,變爲已修改狀態
三、git add ,變爲已暫存狀態
$ git add --all # 當前項目下的全部更改
$ git add . # 當前目錄下的全部更改
$ git add -u # 將工做空間被修改和被刪除的文件添加到暫存區(不包含沒有歸入Git管理的新增文件)
$ git add a.js b.js # 添加某幾個文件
複製代碼
四、git commit 變爲已提交狀態
$ git commit -m "commit 描述" # 將已暫存文件,提交到本地倉庫
# commit 其餘的使用方法
# 0一、git commit -am
# 若是已修改文件以在暫存區中,修改文件後,能夠省去 git add 命令
$ git commit -am "commit 描述"
# 0二、git commit --amend
# git commit --amend 做用以下:
# 1)、若是是未修改狀態,能夠修改最後一次 commit 的描述。
# 2)、若是文件修改了,並提交到了暫存區,能夠將當前修改合併到上個commit中
$ git commit --amend
複製代碼
五、git push,變爲已推送狀態
$ git push -u origin master # 第一次推送,須要將本地與遠程進行關聯
$ git push # 非第一次提交,不準知名推進的遠程分支
複製代碼
Git分支是將你開發工做從項目主線分離開來,以避免影響開發主線。
一、分離主線開發
二、並行開發
$ git branch dev
# or 建立遊離分支
$ git checkout [commit-sha1]
複製代碼
# 切換dev分支
$ git checkout dev
複製代碼
$ git checkout -b dev
複製代碼
# 刪除本地分支
$ git branch -d [branch-name]
# 刪除遠程分支
$ git push origin :[branch-name]
# or
$ git push origin --delete [branch-name]
複製代碼
合併分支
merge合併
# 分支合併。git的合併是個三方合併。
$ git merge [--no-ff] dev
複製代碼
三方合併
複製代碼
三方合併是指,在執行merge命令後,將當前分支、被合併分支以及這兩個分支的共同祖先進行合併。
merge合併衝突解決
複製代碼
若是衝突時,會展現當前分支HEAD和被合併分支之間的不一樣。若是想展現共同祖先的版本。參考:zhuanlan.zhihu.com/p/78505692 主要設置合併衝突的展現方式,命令以下。默認是 merge $ git config --global merge.conflictstye diff3
-ff與--no-ff區別:
- -ff不會出現要給新的合併。 --no-ff會出現一個新的commit
```
# 合併分支 dev 【默認開啓 fast-forward模式】
$ git merge dev
# 禁用 fast-forward
$ git merge --no-ff dev
```
ff[fast-foward快進合併]
- 合併分支時Git默認會使用fast-forward模式
- 在這種模式下,刪除分支會丟掉分支信息
- 合併時加上 --no-ff參數會禁用fast-forward。這樣會多出一個commit id
`rebase合併`
複製代碼
$ git rebase dev
rebase注意事項
- rebase過程也會出現衝突
- 解決衝突後,使用 git add 添加衝突文件,而後執行git rebase --continue
- 接下來Git會繼續應用餘下的補丁
- 任什麼時候候均可以經過git rebase --abort,終止rebase,分支會恢復到rebase開始前的狀態
`rebase與merge區別` [連接:merge 和 rebase 區別](http://igit.58corp.com/_fe/documents/tree/master/白皮書/規範/git)
- merge合併後提交記錄有分叉,rebase合併後是一條直線
- merge不會修改提交歷史,rebase會修改。
`rebase最佳實踐`
- 不要對master分支執行rebase,不然會引發不少問題
- 通常來講,執行rebase的分支都是本身本地的分支,沒有推送到遠程版本的分支
複製代碼