Git簡介
我們都知道Git是用來做版本控制的,那麼到底什麼是Git,如何使用Git。下文記錄着我的學習過程。
我們先了解幾個常用的概念:
-
版本控制(version control):在我們日常開發過程中,總是要對文件做出修改,每次修改後的文件,就相當於一個新版本,而把這一次次修改的文件記錄下來,可以對新版本、舊版本進行操作,就是所謂的版本控制。
-
版本控制系統:用來記錄一次次版本,並可以對其進行操作的系統。主要分成了三類:
- 本地版本控制系統:相當於對每個版本做一個快照,適合個人開發。
- 集中版本控制系統:將所有版本數據同一放在中央倉庫中,用戶同步更新。例如SVN
- 分佈式版本控制系統:每個人的版本都存放在本地中,通過push,pull等操作上傳/拉取到本地。Git就是分佈式版本控制系統
既然Git是分佈式版本控制系統,他存放數據的倉庫就不僅僅只是一箇中央服務器了,我們還要知道有關Git的幾個概念
遠程倉庫:例如github、碼雲等都屬於遠程倉庫,用來存放每個版本數據的數據的
本地倉庫:每個開發者從遠程倉庫中拉取下來版本的數據,開發者對文件等進行了修改,用於存放開發者自己修改的數據。
暫存區:修改的數據還未提交到本地倉庫,只是放在一個類似緩存的地方存放,這個地方就是暫存區
工作目錄:當前開發者正在工作的目錄
下面是我們瞭解一下git的工作流程,如圖:
我們第一次進行開發時,先要將遠程倉庫的數據克隆(clone)到本地倉庫,有時需要創建單獨的分支進行開發,我們需要進行創建或切換(checkout)分支,但通常不用。在日常開發中,通常是先將遠程倉庫中的數據拉取(pull)下來,然後日常改bug,寫業務,當完成一個模塊的修改時,將修改的內容添加(add)到暫存區,再提交(commit)到本地倉庫,一天的開發結束後,推送(push)到遠程倉庫。
下面就是乾貨了,記錄了Git的使用和常用命令
Git 支持多種數據傳輸協議。下面介紹兩種:
架設 Git 服務器時常用 SSH 協議作爲傳輸協議。 因爲大多數環境下服務器已經支持通過 SSH 訪問 —— 即使沒有也很容易架設。 SSH 協議也是一個驗證授權的網絡協議;並且,因爲其普遍性,架設和使用都很容易。
1、生成ssh公鑰(一路回車即可)
ssh-keygen -t rsa -C "[email protected]"
2、進入.ssh文件中
一般位於c盤下user中,是一個隱藏文件
3、在gitee或github上添加公鑰
將.ssh文件中的 id_rsa.pub
文件中的內容複製到公鑰中
4、驗證是否鏈接成功
ssh -T gitee.com
Hi "你的名字"! You've successfully authenticated, but GITEE.COM does not provide shell access.
HTTPS 協議又是智能 HTTP,他的運行方式和 SSH 及 Git 協議類似,只是運行在標準的 HTTP/S 端口上並且可以使用各種 HTTP 驗證機制, 這意味着使用起來會比 SSH 協議簡單的多,比如可以使用 HTTP 協議的用戶名/密碼授權,免去設置 SSH 公鑰。
獲取Git倉庫
在執行git之前,我們首先要設置用戶名和郵箱,否則會報錯Please tell me who you are.
git config --global user.name YourName
git config --global user.email YourEmail
- 將尚未進行版本控制的本地目錄轉換爲 Git 倉庫
git init //初始化倉庫,會創建一個.git文件
//---------下面的命令後面會解釋------------
git add .
git add LICENSE
git commit -m 'initial project version'
- 從其它服務器克隆一個已存在的 Git 倉庫
git clone https://gitee.com/xxxx/dxxxxe.git
/*--修改了文件--*/
git add .
git commit -m "ces"
git push origin master //可能需要輸入密碼
配置Git的忽略文件.gitignore
/node_modules 提交時忽略node_modules目錄
本地Git的常用指令
1、查看
git config -l
git status
git diff //對比工作目錄中當前文件和暫存區域文件之間的差異。修改之後還沒有暫存起來的變化內容。
git diff --staged //比對已暫存文件與最後一次提交的文件差異:
git diff --cached //暫存區和上一個版本的差異
git diff head //本地和上一個把版本的差異
git log //會按時間先後順序列出所有的提交,最近的更新排在最上面,q鍵退出
git reflog
2、添加
- 將修改內容添加到暫存區
git add index.css index.html //將index.css,index.html添加到暫存區
git add . //將所有文件加入緩存區,不包括忽略文件
- 提交到本地倉庫
git commit -m "添加的註釋"
3、刪除
git remove README.md //移除README.md文件。並連帶從工作目錄中刪除指定的文件
git rm --cached README.md //僅僅從暫存區中移除README.md文件,而不從工作目錄也刪除掉
git commit --amend //重新提交,回直接替換掉原來的提交
git checkout -- index.html
//請務必記得 git checkout -- <file> 是一個危險的命令。 你對那個文件在本地的任何修改都會消失——Git 會用最近提交的版本覆蓋掉它。 除非你確實清楚不想要對那個文件的本地修改了,否則請不要使用這個命令。
git reset HEAD CONTRIBUTING.md
git reset --hard HEAD^ //一個尖角號回退一個版本
git reset --hard HEAD~2 //回退兩個版本
git reset --hard number //回退到指定版本,number是指定id,reflog可以查看
遠程倉庫Git常用命令
1、查看
git remote -v //會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL。(fetch拉取地址,push推送地址)
git remote show //查看所有
git remote show origin //查看origin的具體信息
2、添加遠程倉庫
git remote add <shortname> <url>
//現在你可以在命令行中使用字符串 origin1 來代替整個 URL。
git remote add origin1 https://gitee.com/xxxx/xxxx.git
git fetch <remote>
//這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據。 執行完成後,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合併或查看。
git fetch origin1
3、拉取遠程倉庫
git pull origin master
4、推送到遠程倉庫git push <remote> <branch>
git push origin master//當你想要將 master 分支推送到 origin 服務器時
5、遠程倉庫的重命名與移除
git remote rename
git remote rename origin1 org //想要將 origin1 重命名爲 org
git remote remove org //移除org
Git分支常用命令
1、創建分支
git branch dev //查看所有分支列表
2、切換分支
git checkout dev //切換分支到dev
創建一個分支並切換到創建分支上
git checkout -b dev //創建dev分支並切換到dev分支
/*------相當於---------*/
git branch dev
git checkout dev
3、查看每一個分支
git branch -v //查看每一個分支的最後一次提交
4、刪除分支
git branch -d dev //刪除dev分支
5、合併分支:將dev分支合併到master分支上
git checkout master//切換到master分支
git merge dev //合併dev分支
案例:
你突然接到一個電話說有個很嚴重的問題需要緊急修補。 按照如下方式來處理:
- 切換到你的線上分支。
- 爲這個緊急任務新建一個分支,並在其中修復它。
- 在測試通過之後,切換回線上分支,然後合併這個修補分支,最後將改動推送到線上分支。
- 切換回你最初工作的分支上,繼續工作。
實現
git checkout master //切換到主分支
git checkout -b solvePro //創建一個分支
git commit -a -m 'bug is solved' //修改bug後提交
git checkout master //再切換到主分支
git merge solvePro //將solvePro合併到主分支上
git branch -d solvePro //因爲已經用不到該分支了,所以我們刪除掉該分支