綜合技術--gitHub(2)--git基本命令

#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

這樣看起來就精簡多了。

3.3回退版本

回退到上一個版本命令: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
相關文章
相關標籤/搜索