Git入門到使用

Git的入門認知

Git簡單介紹

Git是一個目前來講比較先進且流行的分佈式版本控制系統git

下面咱們經過一張圖來講明Git的工做原理:github

  

圖中有幾個我標紅了塊須要知道一下:shell

玩Git必須知道的幾個概念:vim

  1. 工做空間:也叫工做區,就是咱們的本地磁盤存放代碼的地方緩存

  2. 暫存區:咱們經過add命令,將咱們工做區的代碼添加到暫存區 [git add .]安全

  3. 本地倉庫:而後使用commit命令,將咱們暫存區的代碼提交到咱們的本地倉庫 [ git commit -m "提交註釋"]服務器

  4. 遠程倉庫:而後再將本地倉庫的代碼經過push推送到遠程倉庫[代碼託管中心], [git push origin master]網絡

Git和SVN的區別

SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,集中式版本控制系統是必須聯網才能工做,拉取最新版本到本地 > CRUD > 推送到中央服務器,局域網還行,若是網速慢就很尷尬了ssh

Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每一個人的電腦就是一個完整的版本庫,這樣,工做的時候就不須要聯網了,由於版本都是在本身的電腦上。本身在電腦上改了文件A,其餘人也在電腦上改了文件A,這時,大家兩之間只需把各自的修改推送給遠程倉庫便可。curl

至於Git的安裝

安裝的話不作過多說明,百度谷歌多能夠: https://git-scm.com/download/win

初始化 > 推送遠程倉庫

當咱們安裝完Git後,右鍵雙擊就會在功能欄出現兩個獨有的標識

  

一個是功能欄方式,一個是命令行方式

新建用戶名 + 郵箱做爲標識

由於Git是分佈式版本控制系統,因此須要填寫用戶名和郵箱做爲一個標識:git config --global 參數

  

建立版本庫

版本庫就是倉庫,這個倉庫全部的文件均可以被Git所管理,每一個文件的crud均可以追蹤歷史被還原

我在桌面上新建一個Git_Test目錄做爲普通目錄,在裏面在建立一個Test1目錄做爲倉庫

進入到Test1目錄,郵件雙擊選中國Git Bash Here功能塊,彈出窗口鍵入 git init

  

.git目錄就是用來跟蹤管理版本的,之前有很重要的數據,不得妄自修改或者刪除

add > commit

這裏值得注意的是:

咱們在工做區添加一個文本作測試

  

而後add > commit 這個文本:

  

第一輪提交到本地庫已經完成,下面咱們修改這個text.txt文本:

  

校驗查看咱們修改的內容並提交: git diff test.txt 就會看到修改的差別

而後咱們再次add > commit

  

屢次提交的,咱們能夠經過 git log 查看歷史紀錄,

  

第二種方式查看歷史紀錄:git log --prty=oneline

  

當咱們有多個文件須要添加到暫存區時:

git add xx命令能夠將xx文件添加到暫存區,若是有不少改動能夠經過 git add -A .來一次添加全部改變的文件。注意 -A 選項後面還有一個句點。 git add -A表示添加全部內容, git add . 表示添加新文件和編輯過的文件不包括刪除的文件; git add -u 表示添加編輯或者刪除的文件,不包括新添加的文件

版本回退 / 撤銷修改 / 刪除文件

版本回退

如今咱們先在test2.txt文檔中鍵入一點信息,做爲咱們的錯誤信息,待會用做撤銷操做演示

 

添加到暫存區而後提交到本地倉庫中,當咱們此次的修改是有問題的想要撤銷的時候該怎麼操做呢?

  

 

能夠看看提交日誌信息,這裏回滾的話有兩種方式,咱們一一講解:

  • git reset --hard HEAD^ : 回退到上一個版本,若是想要回退到上上一個版本能夠經過兩個"^"來表示,固然若是想回退的版本距離如今的版本差很遠可使用 git reset --hard HEAD~100這種方式來表示,而後你就能夠查看工做區的文件已經進行了回滾,以前的提交的錯誤版本已經回滾了

    第二種方式就是使用提交日誌中提供的版本號回退到指定版本:git reset --hard 版本號

    當咱們不知道版本號的時候,最全的方式應該是實用這個命令查詢版本號: git reflog

    而後就是使用 git reset --hard 5d00bb0回滾到指定版本

    咱們再次查詢text2.txt發現咱們剛新增的錯誤數據又回來了

撤銷修改

當咱們在還沒有提交的時候發現添加的數據有錯,我沒想回復之前的版本怎麼辦?

  • 第一種方式: 若是知道哪兒有錯,手動清理以後add > commit

  • 第二種方式:按照版本回滾的方法恢復到上一個版本,使用git reset --hard HEAD^

  • 第三種方式:也就是咱們要學習的一種,咱們不想使用上面兩種,我想直接使用撤銷命令

這裏咱們區分一下有沒有添加到暫存區兩種狀況:git checkout --text.txt

當咱們尚未添加到暫存區:git checkout --text.txt 就會回滾到沒有這個版本修改以前的狀態

當咱們已經添加到暫存區後,再次作了修改後的 git checkout --text.txt的做用就是會會回滾到咱們添加到暫存區時的那個狀態,不會回滾到咱們這個版本修改以前的狀態的哦

刪除文件

咱們新建一個文本 delete.txt,鍵入數據後添加暫存區繼又提交到本地倉庫後再刪除這個文件

  

這個時候,咱們只須要git add . > git commit -m "提交備註",便可完成從版本庫中完全刪除這個文件

可是在咱們尚未提交前,若咱們想恢復這個文件可使用git checkout --delete.txt 便可完成恢復

SSH協議+遠程倉庫

下面該遠程倉庫登場了,但在這以前,咱們必須得了解另外一個東西:SSH

本地倉庫和遠程倉庫的之間的傳輸就是經過SSH加密的,

SSH協議,我就發現咱們經常使用的鏈接Linux的軟件Xshell創建鏈接也是採用的SSH協議

  

下面咱們就來看看深淺,順便進階學習遠程倉庫的免密碼登陸

SSH:是一中轉爲遠程登陸會話和其餘網絡服務提供安全性的協議,利用SSH協議能夠有效的房子遠程管理過程當中的信息泄露問題

SSH基於密鑰的安全驗證

使用SSH協議通訊時,推薦使用基於密鑰的驗證方式,就是建立一對密鑰,把公鑰放在須要訪問的服務器上,若是你要鏈接到SSH服務器上,客戶端軟件就會向服務器發起請求,請求會用密鑰進行安全驗證後在發起,當服務器接到請求後,會覈對存到服務器的公鑰和發起請求中的公鑰進行比較,當二者一直的時候,服務器就會用公鑰對其加密並返回給客戶端軟件,客戶端軟件收到返回數據後,利用本地的私鑰對其進行解密再把解密後的信息發送給服務器,實現安全驗證

第一步:生成公鑰私鑰,ssh-keygen -t rsa

公鑰私鑰告訴遠程倉庫的,私鑰是本地儲存的,不能泄漏;

  

用Notepad++打開公鑰:複製裏面的密文到碼雲的SSH密鑰框中,以下:

  

好了,用於鏈接的SSH協議也配置完畢,下面咱們就能夠作一個本地倉庫和遠程倉庫的同步協做的實現了

Push推送

  

  • git remote add origin git@gitee.com:bobibo/Git_test.git //創建鏈接

  • 遠程倉庫中的README.md文件不在本地代碼目錄中會推送失敗,方案:git pull --rebase origin master

  • git push -u origin master :因爲遠程庫是空的,咱們第一次推送master分支時,加上了 –u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。推送成功後,能夠馬上在github頁面中看到遠程庫的內容已經和本地如出一轍了,採用HTTPS協議的話須要鍵入賬號和密碼,採用SSH是面帳號密碼驗證的

Pull拉取

上面咱們已經實現了推送,下面咱們來作一個拉取的Demo

新建一個文件夾做爲工做區,做爲一個咱們拉取遠程倉庫數據的存放地點 Git_pull

git clone + URL

  

衝突解決

如今咱們已經會推送和拉取文件了,但不能每次咱們修改部分文件後都要所有推送,也不能咱們由於遠程倉庫不封文件變動就克隆整個項目到本地,應該是那個文件變動了推送那個文件到遠程倉庫,那個文件變動了,就拉取那個文件到本地進行合併解決衝突,下面咱們就來作這兩個玩意兒的Demo

環境說明:兩我的協同開發,同時A、B早上到公司克隆最新的的數據到本地磁盤,在下班的時候同事A率先想Boss說我要走了,這個時候他把它今天成果推送到了遠程倉庫以後離開了公司,同事B由於一些業務比價複雜,走到了後面,當他也將本身的成果直接推送到遠程倉庫時,是會報錯的,這個時候首先要拉取遠程倉庫最新的數據到本地,解決完衝突後在推送到遠程倉庫,才能高高心心的回家吃上老婆作完頭髮後煮的飯;

建立兩個文件夾A、B,表明兩我的,遠程倉庫克隆數據兩個文件中,如今兩個本地倉庫的數據徹底一致

同事A下班了推送本身的成果到遠程倉庫成功後回家吃老婆煮的飯去了:test2.txt末尾添加一行數據666...

5個小時後......

同時B也搞完了,test2.txt末尾添加一行數據8888...,準備回家葛優躺了,他就不是簡單的push就完事了,由於同時A提交了代碼,遠程倉庫的代碼已經和他本地倉庫的代碼有了衝突,直接推送會失敗:

這個時候正確的作法是先把同事A對遠程倉庫的變動代碼拉取本本地,和本地的代碼合併後在推送:

拉取:git pull

查看有衝突的test2.txt (忘記截圖了,就是吧相應的表示符號刪了,留下整合後的數據):再次推送

查看遠程倉庫的數據是否完整:能夠看到同事A和同事B的數據都在這個遠程倉庫中;

Git私服的搭建

私服的搭建

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel:安裝依賴

yum –y install git:安裝 Git的同時會裝依賴,因此第一步可省略也可執行

git --version:查看版本號,若是安裝成功,會顯示Git的版本號

useradd git :添加Git用戶

passwd git:設置git用戶的密碼 --> 鍵入密碼 --->確認密碼 --->完成

su git :切換到git用戶

cd /home/git/:切換到用戶目錄下

mkdir git_test1:建立一個目錄做爲咱們的倉庫

git init --bare:進入到新建的目錄中,鍵入左邊的命令,初始化一個倉庫

查看當前目錄下的文件和目錄:這樣咱們的一個私服Git服務器就算完成了

小烏龜的推送和拉取

  • 說到小烏龜,這裏咱們仍是使用SSH協議,將咱們本地用戶目錄下的公鑰複製到 :/home/git/.ssh/authorized_keys

  • 通常.ssh文件夾極其內的authorized_keys文件是須要手動建立的:mkdir .ssh | touch authorized_keys

  • 這裏就還涉及到一個問題,不少朋友建立文件以後,.ssh是一個隱藏文件須要使用: ls -a 來顯示

  • mkdir .ssh
  • ls -a
  • chmod 700 .ssh    //給.ssh700權限
  • touch authorized_keys
  • chmod 600 authorized_keys
  • vim authorized_keys     //給500權限
  • 將公鑰複製進去 保存後退出

而後咱們就能夠用小烏龜推送數據了

  

隨便選擇一個本地倉庫,將其推送到私服上:

 

推送算是完成了,下面開始克隆:

  

  

克隆成功,而後咱們查看一個日誌啥的也都是有的,這裏就算是一個小結了吧。

Git分支 + IEDA

首先咱們再IDEA中建立一個Hello World級別的項目,進行設置:

  

將咱們的項目建立爲一個本地倉庫

  

選定我沒得本地倉庫爲項目的上一級目錄:

  

而後咱們就可使用Git的相關功能了:默認添加到暫存區,提交到本地倉庫須要手動操做

  

而後推送到遠程倉庫:碼雲

在這裏剛開始推送不上去,緣由在於倉庫的中有兩個默認的配置文件咱們的本地倉庫中沒有,致使推送不上去

IDEA中的rebase我也試過,而後我用了命令行的方式:git pull --rebase origin master

最後成功推送遠程倉庫

  

鍵入碼雲的賬號和密碼

  

查看碼雲上的項目: OK

  

IDEA + 分支

建立分支

  

  

給新的分支取一個可愛的名字:

  

在新的分支上,咱們建立了一個dev4.class,建立完成以後不要忘記了提交到本地倉庫:

  

當咱們把dev4的代碼提交到本地倉庫後,嘗試與master主分支進行分支合併:

首先切換到master分支:

  

合併分支:dev4分支上的dev4.class整合到master分支中

  

至於衝突解決:咱們master分支和dev4分支都修改dev4這個共有的文件,而後各自在提交到本地倉庫

咱們回到主分支,進行分支合併並解決衝突:

  

而後個人IDEA卡死了,手動解決衝突吧。整合衝突:add ---> commit

  

最後在推送到遠程:

[ 更新 ] Git經常使用命令

  • 新建用戶名: git config --global user.name "name"

  • 關聯郵箱標識: git config --global user.email "name"

  • 建立倉庫初始化: git init

  • 添加文件到緩存區: git add xxx.txt | git add . | git add -A .

  • 提交文件到本地倉庫: git commit -m "註釋"

  • 查看狀態:git status

  • 查看提交歷史記錄:git log --prty=oneline [推薦]

  • 查看提交歷史紀錄: git log

  • 提交版本回滾到上一個版本:git reset --hard HEAD^

  • 回滾到指定版本:

    • 查看全部提交版本號:git reflog

    • 回滾到指定版本號版本:git reset --hard 123456

  • 還沒有提交下撤銷修改:

    • 都沒有添加緩存區的修改撤銷到版本初:git checkout --1.txt

    • 已經添加到緩存區的再次修改則撤銷到咱們添加到緩存區時狀態:git checkout --1.txt

  • 倉庫刪除某個數據: rm 1.txt

  • 拉取代碼:git clone + URL

  • 拉取不一致代碼數據解決衝突:git pull

.

相關文章
相關標籤/搜索