文章目錄
一、Git原理
1.1 什麼是Git
Git 是一種在全球範圍都廣受歡迎的 分佈式版本控制系統。它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,工作的時候就不用聯網了,因爲版本都是在自己的電腦上。最初Git是爲輔助 Linux 內核開發的。Git的作者是Linux之父李納斯·託沃茲。
- 什麼又是版本控制呢? 版本控制(Revision control)是一種在開發的過程中用於管理我們對文件、目錄或工程等內容的修改歷史,方便查看更改歷史記錄,備份以便恢復以前的版本的軟件工程技術。簡單說就是用於管理多人協同開發項目的技術。
- 優點:適合分佈式開發,強調個體;任意兩個開發者之間可以很容易的解決衝突;離線工作;速度快、靈活;公共服務器壓力和數據量都不會太大。
1.2 Git 工作流程
一般工作流程如下:
- 克隆 Git 資源作爲工作目錄。
- 在克隆的資源上添加或修改文件。
- 如果其他人修改了,你可以更新資源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交。
二、Git 的安裝及簡單使用
2.1 安裝Git
yum install git -y
輸入git --version,可查看 git 的版本
2.2 創建倉庫
- 倉庫,這個倉庫裏面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
1、創建一個目錄 mkdir repository
2、通過git init
命令把這個目錄變成Git可以管理的倉庫。
此時,repository版本庫裏會多一個 隱藏目錄.git
,此目錄是 Git來跟蹤管理版本庫的。
2.3 添加文件到版本庫
- 所有的版本控制系統,只能跟蹤文本文件的改動,比如TXT文件,網頁,所有的程序代碼等等,Git也不例外。版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改成了120KB,但到底改了啥,版本控制系統不知道,也沒法知道。
1、用命令git add
告訴Git,把文件添加到倉庫
- 命令git add ,可反覆多次使用,添加多個文件
2、用命令git commit
告訴Git,把文件提交到倉庫
git commit -m "test.txt submit"
- 命令git commit,可以一次提交很多文件,-m後面輸入的是本次提交的說明,可以輸入任意內容,最好是有意義的,這樣就能從歷史記錄裏方便地找到改動記錄。
3、修改test.txt文件內容,運行git status
,告訴我們文件被修改過。
- git status命令:查看倉庫當前的狀態
- git commit -a : 跳過使用暫存區域,自動把所有已經跟蹤過的文件暫存起來一併提交,從而跳過 git add 步驟
4、查看文件test.txt,如何被修改,運行git diff
- 命令git diff:查看difference,查看文件具體的改變
5、重新添加修改後的文件,且提交。
在Git中,每當你文件修改完成時,就可以“保存一個快照”,這個快照在Git中被稱爲commit。一旦你把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復,然後繼續工作。
6、我們可以用git log
命令,查看文件更改的歷史記錄:
- git log命令顯示從最近到最遠的提交日誌,我們可以看到3次提交,最近的一次是chenged test.txt,second(我自己又提交了一次),最遠一次test.txt submit
2.4 版本回退
現在,我們要把當前版本chenged test.txt,second
回退到上一個版本chenged test.txt
1、使用git reset --hard
命令,回退:
回退到上一版: git reset --hard HEAD^
回退到倒數第二版: git rest --hard HEAD^^
回退到commit id爲xxxxxxx的版本 : git rest --hard xxxxxxx
- 在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
- git reset 和 git reset --hard區別:
git reset(git reset –-soft)
回退到某個版本,只回退了commit的信息,不會恢復到index file一級。如果還要提交,直接commit即可。
git reset -–hard
徹底回退到某個版本,本地的源碼也會變爲上一個版本的內容,撤銷的commit中所包含的更改被沖掉
2、我們現在又想回到之前的版本chenged test.txt,second
,只要上面的命令行窗口還沒有被關掉,找到之前版本chenged test.txt,second
的commit id
即可回到之前的版本。
git reset --hard <commit id>
當然,還可以使用git reflog
查看命令歷史,回到未來的某個版本。
2.5 工作區和暫存區
- 工作區:在電腦裏能看到的目錄,我的repository文件夾就是一個工作區
- 版本庫:工作區的一個隱藏目錄
.git
,是Git的版本庫。其中,index就是暫存區,還有Git爲我們自動創建的第一個分支master,以及指向master的一個指針叫 HEAD
前面,我們把文件往Git版本庫裏添加的時候,是分兩步執行的:
- 第一步:
git add
把文件添加進去,本質就是 把文件修改添加到暫存區; - 第二步:
git commit
提交更改,本質就是 把暫存區的所有內容提交到當前分支。
總的來說,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。
1、我們先對 test.txt
進行修改,在新編輯一個test2
在工作區。查看狀態git status
,test2
從來沒有被添加過,所以它的狀態是Untracked
。
2、使用兩次命令git add
,將兩個文件都添加後,用git status
再查看一下
此時,暫存區的狀態
3、執行git commit
就可以一次性把暫存區的所有修改提交到分支
一旦提交後,如果你又沒有對工作區做任何修改,那麼工作區就是“乾淨”的
此時,暫存區就沒有任何內容了
每次修改,如果不用 git add 到暫存區,那就不會加入到commit中,除非使用 git commit -a -m "xxx"
2.6 撤銷修改和刪除文件
1、 僅丟棄工作區的修改:
git checkout -- file
2、 要丟棄已添加到暫存區的文件,但未再更改過:
git reset HEAD <file>
##把暫存區的修改撤銷掉,重新放回工作區,用HEAD時,表示最新的版本
git checkout -- file
##丟棄工作區的修改
3、 要丟棄已添加到暫存區,又作了修改的文件:
git checkout -- file
##撤銷修改就回到添加到暫存區後的狀態
4、刪除文件
命令git rm
用於刪除一個文件。
- 如果一個文件已經提交到版本庫,那麼永遠不用擔心誤刪,但是隻能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。