GIT版本控制工具

1、GIT介紹

 

Git 是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。git

Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。github

Git 與經常使用的版本控制工具 CVS, Subversion 等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持。數據庫

一、git的三個區域

  • 工做區
  • 暫存區
  • 歷史區

二、文件的三種狀態

對於任何一個文件,在 Git 內都只有三種狀態:vim

  • 已修改(modified)    --> Git 的工做目錄
  • 已暫存(staged)       -->暫存區域
  • 已提交(committed) -->本地倉庫

已修改表示修改了某個文件,但尚未提交保存;緩存

已暫存表示把已修改的文件放在下次提交時要保存的清單中。安全

已提交表示該文件已經被安全地保存在本地數據庫中了;服務器

由此咱們看到 Git 管理項目時,文件流轉的三個工做區域:Git 的工做目錄,暫存區域,以及本地倉庫。app

2、下載安裝

地址:https://git-scm.com/分佈式

3、GIT倉庫的全局配置

第一次安裝完成git後,咱們在全局環境下配置基本信息:我是誰工具

$ git config -l 查看配置信息
$ git config --globla -l 查看全局配置信息

配置全局信息:用戶名和郵箱
$ git config --global user.name 'xxx'
$ git config --global user.email 'xxx@xx.xx'

4、建立倉庫完成版本控制(本地)

一、建立本地倉庫

建立一個倉庫文件夾,鼠標右鍵選擇git Bash Here
$ git init
//=>會生成一個隱藏的文件夾".git" (這個文件夾千萬不要刪除,由於暫存區和歷史區還有一些其餘的信息都在這裏,刪了就不是一個完整的git倉庫了)

二、將本地代碼提交到暫存區

在本地編寫完成代碼後(在工做區),把一些文件提交到暫存區

$ git add xxx   把某一個文件或文件夾提交到暫存區
$ git add . 或 -A 把當前倉庫中全部最新修改的文件都提交到暫存區
$ git status  查看當前文件的狀態(紅色表明在工做區/綠色表明在暫存區/看不見東西證實全部修改的信息都已經提交到歷史區)

當前文件狀態

三、把暫存區代碼提交到歷史區

$ git commit -m'描述信息:本次提交內容的一個描述'  【不加空格寫描述信息】
查看歷史版本信息
$ git log 查看提交記錄
$ git reflog  包含回滾信息

注意:從工做區提交到暫存區,從暫存區提交到歷史區,是把內容賦值一份傳過去的,本區域中依然存在這些信息,只有這樣才能對比出哪些文件在某個區

提交記錄

四、歷史版本回滾

根據歷史版本號進行代碼回滾
$ git reset --hard d4970cc 【取版本號的前7位】

5、GIT-HUB實現多人協同開發

GitHub至關於中央服務器

註冊/登陸:https://github.com/

一、本地倉庫與遠程倉庫的代碼拉取與推送

遠程倉庫地址

1//創建本地倉庫和遠程倉庫的鏈接
    查看本地倉庫和哪些遠程倉庫保持連接
    $ git remote -v
    讓本地倉庫和遠程倉庫新建一個連接[origin是隨便起的一個連接名,通常都叫origin]
    $ git remote add origin [GIT遠程倉庫地址]
2//刪除連接
    $ git remote rm origin

注意:想要將本地的代碼推送至遠程倉庫,本地的代碼必須在歷史區【只有歷史區的代碼才能推送至遠程倉庫】

// 每次提交以前最好先將遠程倉庫的代碼拉取到本地[別人有可能修改了代碼]合併代碼的做用
$ git pull origin master

// 將本地代碼推送至GitHub(須要輸入GitHub用戶名和密碼)
$ git push origin master

// 將GitHub倉庫克隆到本地
$ git clone [遠程倉庫git地址] [別名:能夠不寫,默認倉庫名]
$ git clone https://github.com/songzhixue1993/201908.git

二、真實開發的項目流程

/*
 * 真實項目開發流程
 *     一、組長或負責人先建立中央倉庫[增長協做者]
 *     二、小組成員基於$ git clone 把遠程倉庫及默認的內容克隆到本地一份
 *        解決了三件事情
             * 初始化了一個本地倉庫[$ git init]
             * 和對應的遠程倉庫保持了關聯[$ git remote add]
             * 把遠程倉庫默認內容拉取到了本地[$ git pull]
 * 三、每一個組員寫完本身的程序後,基於"git add/git commit"把本身修改的內容存在到歷史區,而後經過"git pull/git push"把本地信息和遠程倉庫信息保持同步便可[可能涉及到衝突的處理]
 */

6、經常使用命令

git diff           # 對比工做區和本地倉庫
git diff --cached # 對比緩存區和本地倉庫
git log           # 查看當前版本以前全部的提交記錄
git reflog        # 查看全部的提交記錄
git log -n 2      # 顯示最近幾條數據
git log -p        # 對比每提交的差別
git log --format="%an:%ae:%s" # 自定義輸出格式
git reset --hard 版本號        # 回滾到指定版本
git chekout --file            # 將文件回滾到最近的一次提交 
git status                    # 查看狀態
git reset HEAD file           # 將指定的文件從緩存區拉取到工做區



# 工做區必須有變更
# 保存開發狀態
git stash  # 快照
git stash pop # 恢復並刪除快照
git stash list # 查看全部快照
git stash apply stash{id} # 恢復指定快照
git stash drop # 刪除快照


git branch  # 查看分支
git branch dev # 建立dev分支
git checkout dev # 切換到dev分支
git branch -d dev # 刪除分支
git checkout -b dev1 # 建立分支並切換分支

# 合併分支,在合併到的分支上執行
git merge dev  # 在master主分支上執行,(將dev的代碼合併到master)

# 衝突
# 不一樣的分支在對同一行代碼進行修改,在代碼合併時會發生衝突
"""
一、合併時間不能太長,通常2-3天合併一次
二、完成一個小功能合併一次
三、合併的時候全部人都要在
"""

# 克隆分支
git checkout -b dev origin/dev [指定以origin/dev爲模板建立一個分支]

# 刪除遠程倉庫的分支
git checkout --delete origin

# tag
git tag  # 查看標籤
git tag -a name -m '提交信息'
git tag -a name -m '提交信息' hash值 # 以哈希值爲模板建立一個標籤tag
git tag -d name   # 刪除本地tag
git push origin :refs/tags/v0.5  # 刪除遠程倉木的tag(給遠程倉庫推送了一個空的tag)


# 忽略文件
# 把不想上傳的文件寫在.gitignore文件中
vim .gitignore
    - db.py

# rebase
變基 將提交記錄變成一條直線

# 切換git用戶
git config --global --unset user.name "xxx"
git config --global --unset user.email "xxx"
相關文章
相關標籤/搜索