分佈式版本控制系統-git

Git是目前世界上最早進的分佈式版本控制系統git

SVN是集中式的版本控制系統,而Git是分佈式版本控制系統,集中式和分佈式版本控制系統有什麼區別呢?這個能夠找度娘......分佈式

1.安裝Gitide

yum install git

查看git版本ui

git --version

2.建立git本地用戶名和郵箱.spa

git config --global user.name "Sanerii"   
git config --global user.email ylemail2002@sina.cn

查看git配置.版本控制

[root@localhost ~]# git config --list
user.name=Sanerii
user.email=ylemail2002@sina.cn

給git配置顏色.日誌

git config --global color.ui true

3.建立版本庫:code

版本庫又名倉庫,英文名repository,你能夠簡單理解成一個目錄,這個目錄裏面的全部文件均可以被Git管理起來,每一個文件的修改、刪除,Git都能跟蹤,以便任什麼時候刻均可以追蹤歷史,或者在未來某個時刻能夠「還原」。
1.> 建立目錄.blog

[root@localhost ~]# mkdir oldman
[root@localhost ~]# cd oldman/
[root@localhost oldman]# ll
total 0
[root@localhost oldman]#

2.>經過git init命令把這個目錄變成Git能夠管理的倉庫:文檔

[root@localhost oldman]# git init
Initialized empty Git repository in /root/oldman/.git/
[root@localhost oldman]# ls -la
total 12
drwxr-xr-x   3 root root 4096 Jan 23 13:59 .
dr-xr-x---. 26 root root 4096 Jan 23 13:58 ..
drwxr-xr-x   7 root root 4096 Jan 23 13:59 .git
#瞬間Git就把倉庫建好了,並且告訴你是一個空的倉庫(empty Git repository)

3.>編寫文件提交到git,並運行git status命令看看結果:

添加文件到Git倉庫,分兩步:

第一步,使用命令git add <file>,將文件添加到暫存區,注意,可反覆屢次使用,添加多個文件;<文件須要存在或提早建立好.>

第二步,使用命令git commit,完成提交。

git add命令實際上就是把要提交的全部修改放到暫存區(Stage),而後,執行git commit就能夠一次性把暫存區的全部修改提交到分支。

[root@localhost oldman]# echo "hello world" >> readme.txt   #在git目錄寫一個文件
[root@localhost oldman]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       readme.txt
nothing added to commit but untracked files present (use "git add" to track)
[root@localhost oldman]# 
[root@localhost oldman]# git add readme.txt   #添加一個文件到git
[root@localhost oldman]# git status        #查看git狀態 
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   readme.txt
#
[root@localhost oldman]# git commit -m "the first commit"    #提交文件
[master (root-commit) 9fd15c4] the first commit
files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt
[root@localhost oldman]# git status
# On branch master
nothing to commit (working directory clean)

[root@localhost oldman]# echo "working..." >> readme.txt      #向文件中追加內容
[root@localhost oldman]# git diff readme.txt                                 #使用diff命令查看文件改變內容
diff --git a/readme.txt b/readme.txt
index 3b18e51..5c1acd5 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 hello world
+working...                                                                                                    //爲追加的內容
[root@localhost oldman]# git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@localhost oldman]# git add readme.txt                                #添加文件到git
[root@localhost oldman]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#
[root@localhost oldman]# git commit -m "t2 commit"                #提交文件
[master 4f34513] t2 commit
 1 files changed, 1 insertions(+), 0 deletions(-)
[root@localhost oldman]# git status
# On branch master
nothing to commit (working directory clean)
[root@localhost oldman]#
提交文件及查看狀態

小結

要隨時掌握工做區的狀態,使用git status命令。

若是git status告訴你有文件被修改過,用git diff能夠查看修改內容。

4.版本回退 

命令:git reset --hard commit_id  

回退到上一個版本:git reset --hard HEAD^

git log 命令顯示從最近到最遠的提交日誌,若是嫌輸出信息太多,看得眼花繚亂的,能夠試試加上--pretty=oneline參數:

Git提供了一個命令git reflog用來記錄你的每一次命令:

[root@localhost oldman]# cat readme.txt    #個人文件每一行表明提交了一次
hello world
hello world too
hello world 3too
[root@localhost oldman]# git log                 #顯示從最近到最遠的提交日誌,咱們能夠看到3次提交.
commit da0125f6d4f02a96a423e4d19290db9db6fc70b0
Author: Sanerii <ylemail2002@sina.cn>
Date:   Mon Jan 23 15:08:41 2017 +0800

    the 3th commit

commit 6dd3e4d624d28ded804d95c151af96cca51a7184
Author: Sanerii <ylemail2002@sina.cn>
Date:   Mon Jan 23 15:07:54 2017 +0800

    the 2td commit

commit 9fd15c47471eb23732bcbd0ad5926dc53b2fce98
Author: Sanerii <ylemail2002@sina.cn>
Date:   Mon Jan 23 14:04:22 2017 +0800

    the first commit
[root@localhost oldman]# 
[root@localhost oldman]# git log --pretty=oneline        #若是嫌輸出信息太多,看得眼花繚亂的,能夠試試加上--pretty=oneline參數:
da0125f6d4f02a96a423e4d19290db9db6fc70b0 the 3th commit
6dd3e4d624d28ded804d95c151af96cca51a7184 the 2td commit
9fd15c47471eb23732bcbd0ad5926dc53b2fce98 the first commit
#在Git中,用HEAD表示當前版本,也就是最新的提交da0125...c70b0(注意個人提交ID和你的確定不同),上一個版本就是HEAD^,上上一個版本就是HEAD^^,
#固然往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100。 [root@localhost oldman]# git reset --hard HEAD^ HEAD is now at 6dd3e4d the 2td commit #回退到上一個版本. [root@localhost oldman]# cat readme.txt hello world hello world too #咱們要把當前版本回退到上一個版本,就可使用git reset --hard HEAD^ 命令: 在Git中,老是有後悔藥能夠吃的。當你用$ git reset --hard HEAD^回退到the 2td commit版本時,再想恢復到the 3th commit,就必須找到the 3th commit的commit id. Git提供了一個命令git reflog用來記錄你的每一次命令:
[root@localhost oldman]# git reflog 6dd3e4d HEAD@{
0}: HEAD^: updating HEAD da0125f HEAD@{1}: commit: the 3th commit 6dd3e4d HEAD@{2}: commit: the 2td commit 6dd3e4d HEAD@{0}: HEAD^: updating HEAD 第二行顯示the 3th commit的commit id是da0125f,如今,你又能夠回到提交前的狀態了。
[root@localhost oldman]# git reset
--hard da0125f #使用id恢復到第三次提交的版本. HEAD is now at da0125f the 3th commit [root@localhost oldman]# cat readme.txt hello world hello world too hello world 3too [root@localhost oldman]#

如今總結一下:

HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。

要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。

5.撤銷修改(兩種狀況)

1.>git checkout -- file能夠丟棄工做區的修改:

git checkout -- file

命令git checkout -- readme.txt意思就是,把readme.txt文件在工做區的修改所有撤銷,這裏有兩種狀況:

一種是readme.txt自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;

一種是readme.txt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。

總之,就是讓這個文件回到最近一次git commitgit add時的狀態。

2.>修改只是添加到了暫存區,尚未提交的撤銷.

git reset HEAD file能夠把暫存區的修改撤銷掉(unstage),從新放回工做區:

git reset HEAD file

git reset命令既能夠回退版本,也能夠把暫存區的修改回退到工做區。當咱們用HEAD時,表示最新的版本。

小結

又到了小結時間。

場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

 

參考文檔:

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 

相關文章
相關標籤/搜索