Git基礎學習記錄

第一部分:Git 基礎

1、Git綜述

一、Githtml

Git是一個開源、敏傑高效的分佈式版本控制工具。git

二、版本控制比較macos

  • 本地版本控制系統windows

    1)本地版本控制系統bash

    • 用目錄拷貝區別不一樣的版本
    • 公共文件容易被覆蓋
    • 成員溝通成本高,代碼集成效率低下

    2)如圖:服務器

  • 集中化的版本控制系統分佈式

    1)集中式版本控制系統工具

    • 有集中的版本管理服務器
    • 具有文件版本管理和分支管理能力
    • 集成效率有明顯的提升
    • 客戶端必須時刻和服務器相連

    2)如圖ui

  • 集中化的版本控制系統spa

    1)分佈式版本控制系統

    • 服務端和客戶端都有完整的版本庫
    • 脫離服務端,客戶端照樣能夠管理版本
    • 查看歷史和版本比較等多數操做,都不需訪問服務器,比集中式更能提升版本管理效率

    2)如圖

2、Git 安裝

windows步驟

Mac安裝步驟

Linux安裝步驟

3、Git配置

一、倉庫的配置 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
複製代碼

4、Git 工做流程

使用 Git 平常開發的流程通常以下

  1. 建立或克隆 Git 資源做爲工做目錄
  2. 在克隆的資源上添加或修改文件
  3. 若是其餘人修改了,咱們能夠更新資源
  4. 在提交前查看修改
  5. 提交修改到本地
  6. 提交修改到遠程
  7. 在修改完成後,若是發現錯誤,能夠撤回提交併再次修改並提交

5、初始化Git本地倉庫

# 初始化本地倉庫
$ git init [--bare]
# 將遠程倉庫拉去到本地
$ git clone [--bare] originPah
複製代碼

6、四個區五種狀態

四個區

  • 工做區
  • 暫存區
  • 本地倉庫
  • 遠程倉庫

五種狀態

  • 未修改(origin)
  • 已修改(Modified)&未追蹤(Untracked)
  • 已暫存(Staged)
  • 已提交(Commited)
  • 已推送(Pushed)

順序操做

  • 一、工做區與倉庫保持一致

  • 二、文件增刪改,變爲已修改狀態

  • 三、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 # 非第一次提交,不準知名推進的遠程分支
    複製代碼

操做圖解

7、Git分支

  • Git分支簡介

Git分支是將你開發工做從項目主線分離開來,以避免影響開發主線。

  • 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合併`

複製代碼

rebase合併 dev

$ 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的分支都是本身本地的分支,沒有推送到遠程版本的分支
複製代碼
相關文章
相關標籤/搜索