#1.建立repository
repository,即倉庫的意思,這裏表示建立git的本地倉庫。能夠簡單的理解爲在Windows上某個盤符下的一個目錄文件,該目錄裏面全部的文件都會被git管理,每一個文件的修改/刪除,git都會跟蹤,所以在任什麼時候刻均可以追蹤歷史,即還原成之前的版本。
個人倉庫建立在h盤,名稱:gitRepositories,建立過程以下
這個時候本機的h盤下面便多了個文件(gitRepositories)。
接着我在本地倉庫裏面新建一個子倉庫,以下
如上的那些操做,只是簡單的經過linux命令建立一些目錄,和git沒有任何關係,爲了能讓git管理這個目錄(倉庫),須要使用git init命令,以下
這個時候H:\gitRepositories\firstRepo目錄下多了一個.git目錄,這個目錄就是git來跟蹤/管理版本的。(注意:該.git目錄位於firstRepo目錄下,所以只有在該目錄下的文件纔會被git管理)
#2.將須要被git管理文件添加到倉庫中
這裏須要明白一點:全部的版本控制工具,只能跟蹤到文本文件的改動,好比txt、網頁、程序的源碼等,git也不例外。對於圖片、音視頻這些二進制文件,git雖然也能管理,可是沒有辦法跟蹤到二進制文件的具體變化,也就是說只能知道圖片/音頻/視頻的大小從50kb變成了80kb,可是到底改動了什麼,git也不知道。
我在firstRepo目錄下新建一個記事本文件test.txt,內容:123456,能夠手動的在h盤創建,也能夠經過命令來創建。添加到版本庫中的步驟以下
##2.1 使用git add test.txt將test.txt添加到暫存區,以下linux
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git add test.txt
沒有任何提示,則說明添加成功了。
##2.2 使用git commit將暫存區的文件提交到本地倉庫git
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "首次提交test.txt" *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'sand@sand_pc.(none)')
截圖以下
很明顯,我這裏報錯了,提示要先執行ide
Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository.
提示:須要先配置user.email和user.name來設置咱們的帳號,若是加上--global的話,表示該帳號全局可使用,不然僅僅使用於該倉庫。
##2.3 配置權限
這裏咱們就來設置全局的吧工具
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git config --global user.name "lixianli" sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git config --global user.email designer_back@163.com sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git config --global -l user.name=lixianli user.email=designer_back@163.com
##2.4 繼續提交
接着咱們再來提交(有可能須要從新添加一次)this
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git add test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "首次提交test.txt" [master (root-commit) 0d6dd3c] 首次提交test.txt 1 file changed, 1 insertion(+) create mode 100644 test.txt
很明顯,此次提交成功了。
##2.5 查看還有哪些修改的文件未提交
接着使用git status命令來查看暫存區是否還有文件未提交3d
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git status On branch master nothing to commit, working directory clean
說明暫存區沒有修改過的文件須要提交。
##2.6 修改文件內容
接着,咱們來修改下test.txt裏面的內容,修改爲以下版本控制
123456 789012
這個時候git已經檢測到了test.txt文件發生了改變,繼續使用git status命令來查看是否存在已經修改過還未提交的文件。code
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: test.txt no changes added to commit (use "git add" and/or "git commit -a")
如上告訴咱們,test.txt文件已發生改變。
使用 "git add 文件名" 來更新/提交該文件
使用 "git checkout --文件名" 來放棄改變
使用 "git diff 文件名" 來查看該文件有哪些改變
這裏,咱們先查看下test.txt文件有哪些變化視頻
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git diff test.txt diff --git a/test.txt b/test.txt index 4632e06..3827e5e 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ -123456 \ No newline at end of file +123456 +789012 \ No newline at end of file
截圖以下
以上說明:修改前文件a/test.txt,修改後文件b/test.txt
修改前文件的內容
123456
修改後文件的內容
123456
789012
##2.7 提交修改後的文件
接着咱們提交到本地倉庫圖片
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git add test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "增長一行,內容爲789012" [master 87e8bc4] 增長一行,內容爲789012 1 file changed, 2 insertions(+), 1 deletion(-)
#3.版本回退
##3.1 修改/提交text.txt文件
在test.txt文件再增長一行數據:345678。
將test.txt文件添加到暫存區。
將test.txt文件提交到本地倉庫。
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git add test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "增長一行數據:345678" [master 3d5f005] 增長一行數據:345678 1 file changed, 2 insertions(+), 1 deletion(-) sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
##3.2 查看歷史記錄
使用git log命令查看歷史記錄
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git log commit 3d5f0052c4ece6ce8bdc78a2634fdf64ecfc0567 Author: lixianli <designer_back@163.com> Date: Wed Nov 2 16:27:05 2016 +0800 增長一行數據:345678 commit 87e8bc4d25b910f73bf167262aada5f0cf9da970 Author: lixianli <designer_back@163.com> Date: Wed Nov 2 12:28:35 2016 +0800 增長一行,內容爲789012 commit 0d6dd3cc7b055804db1378113a9ca9b24c7b2d53 Author: lixianli <designer_back@163.com> Date: Wed Nov 2 12:24:00 2016 +0800 首次提交test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
能夠看出,歷史記錄是由近到遠顯示的。
提交版本號:3d5f0052c4ece6ce8bdc78a2634fdf64ecfc056七、87e8bc4d25b910f73bf167262aada5f0cf9da970
提交做者:lixianli designer_back@163.com
提交日期:Wed Nov 2 16:27:05 2016 +0800
提交信息:增長一行數據:345678
上面的信息很全,若是咱們只關注提交信息呢,有時候須要根據提交信息來回退版本,這時候須要使用命令
$ git log --pretty=oneline 3d5f0052c4ece6ce8bdc78a2634fdf64ecfc0567 增長一行數據:345678 87e8bc4d25b910f73bf167262aada5f0cf9da970 增長一行,內容爲789012 0d6dd3cc7b055804db1378113a9ca9b24c7b2d53 首次提交test.txt
這樣看起來就精簡多了。
回退到上一個版本命令:git reset --hard HEAD^
回退到上兩個版本命令:git reset --hard HEAD^^
以此類推……
回退版本命令2:git reset --hard HEAD~n,這裏n是正整數,表示向前推幾個版本
我這裏舉例,向前推2個版本
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git reset --hard HEAD~2 HEAD is now at 0d6dd3c 首次提交test.txt
咱們再來查看下test.txt裏面的內容
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ cat test.txt 123456
接着查看下提交歷史記錄
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git log commit 0d6dd3cc7b055804db1378113a9ca9b24c7b2d53 Author: lixianli <designer_back@163.com> Date: Wed Nov 2 12:24:00 2016 +0800 首次提交test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
很明顯,提交記錄只有一次,版本回退了。
##3.4 前進版本
有時候回退版本後,咱們發現,最新的版本有些內容是咱們須要的,即這個時候須要獲取到當前版本以後版本的一些內容。那麼,如何恢復到回退前的版本呢。
經過命令git reset --hard 版本號,能夠到任何版本。可是這裏,咱們回退前沒有記住最新版本的版本號,則咱們可使用以下命令獲取版本號
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git reflog 0d6dd3c HEAD@{0}: reset: moving to HEAD~2 3d5f005 HEAD@{1}: commit: 增長一行數據:345678 87e8bc4 HEAD@{2}: commit: 增長一行,內容爲789012 0d6dd3c HEAD@{3}: commit (initial): 首次提交test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
每次提交/回退操做,系統都會有一個操做號,這裏咱們拿到了全部的操做號。好比,我想回退到"增長一行,內容爲789012"這個版本,則使用以下命令
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git reset --hard 87e8bc4 HEAD is now at 87e8bc4 增長一行,內容爲789012
接下來,查看這個版本的內容,取出咱們所須要的
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ cat test.txt 123456 789012
#4.工做區與暫存區的區別
工做區:即咱們電腦上常見的目錄,例如H:\gitRepositories。
暫存區:這個目錄H:\gitRepositories\firstRepo下有個隱藏目錄.git,該隱藏目錄就是版本庫(repository),版本庫裏面存放了不少東西,最重要的是stage(暫存區),還有git會爲咱們自動建立第一個分支master。
總結:將文件提交倉庫有兩步
1.使用git add 將文件添加到暫存區
2.使用git commit 將暫存區的全部文件提交到當前分支上
若是咱們修改了工做區中的文件,沒有將該文件添加到暫存區,而直接提交該文件,是不能成功的。例如:我修改了test.txt文件內容,而後直接提交
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: test.txt no changes added to commit (use "git add" and/or "git commit -a") sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "增長內容:cccccc" On branch master Changes not staged for commit: modified: test.txt no changes added to commit sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
#5.撤銷修改
如今我在test.txt文件裏添加了內容:cccccc,先查看
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ cat test.txt 123456 789012 cccccc sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
這個時候還沒提交,可是我發現添加的內容cccccc有錯誤,所以,這時候我須要恢復到以前的版本,有以下方法。
方法1:前提是我知道我應該刪除那些內容,則我直接手動的刪除那些內容,而後add到暫存區,接着commit就行。
方法2:使用git reset --hard HEAD~n命令回退到上一個版本。
方法3:假設我不想使用上述兩種方法呢,想直接使用撤銷命令,則應該以下
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git checkout -- test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
截圖以下
使用命令 git checkout --文件名,就是將文件在工做區作的修改所有撤銷,這裏存在兩種狀況
1.test.txt修改後,還沒放到暫存區。使用撤銷命令就能夠回退到與版本庫如出一轍的狀態。
2.test.txt修改後,存放到了暫存區,接着又作了修改。這時候,撤銷命令只能回退到添加到暫存區後的狀態。剩下的,就只能採用方法1或者方法2來回退了。
#6.刪除文件
如今咱們在H:\gitRepositories\firstRepo目錄下新建一個a.txt文件,而後提交
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ ls a.txt test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git add a.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "新增a.txt文件" [master da94b84] 新增a.txt文件 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $
假設我如今須要刪除a.txt,使用以下命令
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ ls a.txt test.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ rm a.txt sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ ls test.txt
這種刪除只是將目錄下的a.txt文件刪除了,並無將版本庫中的文件完全刪除,要想完全刪除,還須要執行commit命令。以下
sand@sand_pc MINGW64 /h/gitRepositories/firstRepo (master) $ git commit -m "完全刪除a.txt文件" On branch master Changes not staged for commit: deleted: a.txt no changes added to commit