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 commit
或git 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