Git:學習筆記(一)—基礎操作與版本回退

Git簡介

Git是什麼

Git是一個開源的分佈式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。

集中式與分佈式

集中式版本控制系統: CVS、SVN
所謂集中式版本控制系統,就是版本庫是集中放在一箇中央服務器的,幹活的時候用的都是自己的電腦,因此要先從中央服務器獲取最新版本,然後開始幹活,活幹完後,再把自己完成的最新版本推送到中央服務器。集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在局域網內還好,速度快,但是如果在互聯網上,網速慢的話,下載一個10M的文件得五六分鐘,這就比較頭疼了…
分佈式版本控制系統: Git
分佈式版本控制系統,它與集中式最大的不同就是,分佈式版本控制系統不需要聯網,因爲它根本沒有中央服務器,而是在每個人的電腦上都有一個版本庫,工作的時候,甲在自己的電腦上修改了文件A,他的同事乙在自己的電腦上也修改了文件A,這是,甲乙兩人只需要把自己的修改推送給對方就可以互相看到對方的修改了。與集中式相比,分佈式版本控制系統的安全性要高出很多,因爲集中式版本控制系統的話,如果中央服務器宕掉了,那麼就會導致所有人都沒得活幹了,而分佈式版本控制系統,每個人的電腦都有版本庫,某一個人的電腦壞了不要緊,隨便從另外一個同事那裏複製一個就可以了。

在實際使用中,很少有兩人之間互相推送版本庫的修改,因爲他們可能不在一個局域網,因此分佈式版本控制系統也有一個“中央服務器”,但是這個服務器僅僅用來交換大家的修改,沒有它大家一樣可以正常工作,只是交換修改不方便而已。

安裝Git

Git最早是在Linux系統上開發的,很長一段時間,Git只能在linux和unix上面跑,慢慢的有人將它移植到了windows上,現在,Git可以運行在linux、unix、MAC、windows這幾大平臺了。

在Linux上安裝Git

我使用的是Redhat6版本的linux系統,鏡像裏面已經內置好了Git,我們直接使用yum的方式安裝即可,其他版本的話如果直接安裝不了,可以到官網下載源碼包進行源碼編譯安裝(./config-------->make----------->make install)
在這裏插入圖片描述
yum install git -y
在這裏插入圖片描述
安裝完成後在終端輸入git,就會出現git的幫助文檔
在這裏插入圖片描述
安裝完成後我們還需要進行最後一步的配置,在終端執行以下命令

git config --global user.name 'your name'
git config --global user.email 'your email([email protected])'

在這裏插入圖片描述因爲Git是分佈式版本控制系統,所以每個人必須自報家門:你的名字和你的郵箱地址。注意:git config 的–global參數,表示這臺機器上的所有Git倉庫都會使用這個配置,你也可以對某個倉庫指定不同的名字和郵箱。

創建版本庫

版本庫又叫倉庫,可以將他理解成一個目錄,這個目錄中的所有文件都會被Git管理起來,每個文件的修改、刪除,Git都可以跟蹤,以便任何時刻都可以跟蹤歷史,會者在將來某個時可“還原“。
1、選擇一個合適的地方,創建一個新目錄

mkdir gitdemo
cd gitdemo
pwd

在這裏插入圖片描述
2、使用git init命令將這個目錄變成Git可管理的目錄,即版本庫
在這裏插入圖片描述
使用這個命令,Git瞬間就把倉庫建好了,並且告訴你是一個空的Git倉庫(empty Git repository),細心的人可以發現,使用這個命令後,該目錄下多了一個.git目錄,沒事千萬別去修改這個目錄中的文件,這個目錄是Git用來跟蹤管理版本庫的,亂改的話,就會破壞Git倉庫。

3、把文件添加到版本庫
明確一下,所有的版本控制系統,都只能管理文本文件,只能跟蹤文本文件的改動,例如TXT文件,因此,git也不例外,如果是二進制文件或者是word文件,版本控制系統就不會跟蹤其的改動了。
因爲文本是有編碼的,比如中文有常用的GBK編碼,日文有Shift_JIS編碼,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,所有語言使用同一種編碼,既沒有衝突,又被所有平臺所支持。
4、編寫一個README.txt文件,內容如下:

Git	is	a	version	control	system.
Git	is	free	software.

注意,這個文件一定要放到git目錄中,即之前創建的目錄中,也可以放在其子目錄下,因爲只有放在版本庫中,Git纔可以對其進行管理。
創建好後,我們需要兩步將該文件添加入git倉庫:
第一步:使用git add README.txt,執行後沒有任何顯示即爲成功,因爲在unix系統中,沒有消息就是好消息。
在這裏插入圖片描述
第二步:使用git commit命令告訴git,提交了一個文件到了git倉庫
在這裏插入圖片描述git commit後面的-m參數後面的是對本次提交的說明,盡力寫一些有用的說明,git commit命令會告訴你提交後哪裏有了改動,git commit命令一次性可以提交多個文件到版本庫中,就是說你可以多次使用git add添加多個文件後,然後使用git commit命令一次性將這些文件提交。

git status與git diff

git status: 改命令可以讓我們隨時掌握版本庫的狀態,告訴我們版本庫中有沒有哪個文件被修改了。
git diff: git status可以告訴我們那個文件被修改了,但是,如果可以看到是哪些內容被修改了,修改成了什麼內容,那顯然是更好的,我們可以使用git diff來實現,diff即爲different,顯示不同的地方。

1、我們修改之前的README.txt文件,修改爲如下內容:

Git is a distributed version control system.
Git is free software.

2、現在,運行git status命令查看倉庫狀態:
在這裏插入圖片描述
上面顯示告訴我們,README.txt文加被修改了,但是還沒有被提交,我們也不知道是哪些內容被修改了,使用git diff命令查看:
在這裏插入圖片描述
可以看到,README.txt文件中的Git is a version control system.被修改成了Git is a distributed version control system.與linux中的diff命令輸出相同,-號後面表示修改之前的內容,+後面表示修改之後的內容。
3、知道了文件被修改了哪些內容,現在我們就可以放心的提交了,再次提交與提交新文件是相同的,兩步,第一步:
git add README.txt
在這裏插入圖片描述
第二步:git commit -m ‘add distributed’
在這裏插入圖片描述
4、提交後,我們再次使用git status查看倉庫狀態
在這裏插入圖片描述
顯示沒有需要提交的修改,並且工作目錄是乾淨的。

忽略特殊文件

有些時候你必須把某些文件放入版本庫中,但是你又不能提交他們,比如保存了數據庫密碼的配置文件等等,每次git status時都會出現untracked files,這確實讓人狠抓狂啊,好在Git考慮到了大家的感受,這個問題解決起來也是非常簡單,我們只要在Git工作區的根目錄下創建一個.gitignore文件,然後把需要忽略的文件名填進去,Git就會自動忽略這些文件。
忽略文件的原則是:

  1. 忽略操作系統自動生成的文件,比如縮略圖等;
  2. 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個
    文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生
    的 .class 文件;
  3. 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。
    編輯好.gitignore文件後,我們需要將它提交到Git

比如說我們的版本庫中有一個my.cnf文件,當我們不想提交它時,我們每次git status都會出現提示
在這裏插入圖片描述
我們現在在.gitignore文件中寫入文件名my.cnf,提交到Git然後再執行git status

在這裏插入圖片描述

版本回退

我們每次修改文件並提交後,都會產生一個快照,這個快照被稱爲‘commit’,有了這些快照,當我們將文件亂改了或者誤刪除了的話,我們可以使用這些‘commit‘,將文件還原到最近的一個commit,然後繼續工作,而不是丟失掉全部成果。

1、git log命令可以告訴我們一共提交了幾個版本到了倉庫:
在這裏插入圖片描述
git log命令可以顯示從最近到最遠的提交日誌,我們可以加上–pretty=oneline簡化輸出內容:
在這裏插入圖片描述
我們看到的這些長串的數字加字母叫git的commit id號,因爲git是分佈式版本控制系統,因此這些commit id號必須非常的大,如果是1,2,3這種的話,最後肯定會衝突,這是由SHA1計算出來的一串非常大的數字。

在git中,用HEAD表示當前版本,HEAD^表示上個版本,HEAD^表示上上個版本,那如果有前100個版本呢,我們可以使用HEAD~100來表示,現在我們使用git reset命令將版本回退到之前的版本吧

我們現在的版本是‘add GPL’,現在使用git reset --hard HEAD^命令將其回退到上個版本,即‘add distributed’版本
在這裏插入圖片描述
我們來看看README.txt文件的內容是否回退成功
在這裏插入圖片描述
我們還可以繼續往前回退,不過現在我們先來使用git log查看一下倉庫狀態
在這裏插入圖片描述
可以看到,回退之前的版本已經消失了,那我們現在返回了想撤銷回去該怎麼辦呢,可以這樣做,只要我們沒有關閉當前的終端,可以在之前找到回退之前版本的commit id,然後使用git reset --hard 'commit id’來進行撤銷,commit id只用寫前面幾個就行,不用全寫,git會自動去找符合要求的。
在這裏插入圖片描述
git版本回退的速度非常快,這是因爲在他的內部有一個指向當前版本的HEAD指針,當你回退版本的時候,git只是將HEAD指針指向了add GPL。
在這裏插入圖片描述
該爲指向add distributed:
在這裏插入圖片描述
前面我們說過可以使用commit id來恢復到回退之前的版本,那如果我們今天回退到了某個版本,然後將電腦關閉了,第二天又想回到回退之前的版本的話該怎麼辦,別擔心,只要我們找到想恢復版本的commit id號就可以了,比如說我們現在要恢復到add GPL版本,我們可以使用git reflog命令,git reflog命令記錄了你之前的每一次命令
在這裏插入圖片描述
我們可以看到,第四行顯示的就是add GPL版本的commit id號,現在我們可以恢復了

總結一下

一、

1、初始化一個git倉庫,使用命令:git init
2、添加文件到git倉庫,分爲兩步:
		# git add 文本文件
		# git commit -m ‘說明’
可以一次添加多個文件,然後使用git commit一次性提交

二、

1、要隨時掌握工作區的狀態,使用命令 git status
2、如果使用了git status告訴你有文件被修改過,那麼可以使用git diff來查看被修改的內容

三、

1、HEAD指的是當前版本,使用git reset --hard ‘commit id’可以在各個歷史版本之間來回穿梭
2、如果想恢復到回退之前的版本,我們可以使用git reflog命令查看我們之前的操作,其中會有回退之前版本的commit id號,拿到commit id號,我們就可以使用git reset --hard ‘commit id’進行恢復了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章