每一個開發人員應該都會一個版本管理工具,在Git和SVN中,我選擇以Git,如下是個人一些心得java
Git是目前世界上最早進的分佈式版本控制系統(沒有之一)。linux
1)、linux下安裝:git
Ubuntu Linux,經過一條sudo apt-get install git就能夠直接完成Git的安裝,很是簡單。vim
2)、windows下安裝:windows
在Git官網 下載,而後所有選默認,一直點next就能夠分佈式
1)、設置用戶名和郵箱,用來區分用戶(注:在windows中,安裝完成後在開始菜單中有個Git Bash,點擊這個就能夠打開Git,裏邊是寫Git的命令的)工具
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
2)、建立版本庫學習
建立一個版本庫很是簡單,首先,選擇一個合適的地方,建立一個空目錄:測試
$ mkdir learngit $ cd learngit $ pwd D:/JavaWorkSoftware/git/learngit
注:最後這個pwd是用來查看當前目錄,若是你使用Windows系統,請確保目錄名(包括父目錄)不包含中文。this
3)、經過git init命令把這個目錄變成Git能夠管理的倉庫:
$ git init Initialized empty Git repository in D:/JavaWorkSoftware/git/learngit/.git/
4)、咱們寫一個文件到倉庫中
建立一個example.txt
This is an example file, This is creat in Git.
(2).添加文件進去,用git add
命令
$ git add example.txt warning: LF will be replaced by CRLF in example.txt. The file will have its original line endings in your working directory
這個命令通常是不會有任何提示的,可是我出現瞭如上提示。
意思大概是:LF(換行,Line Feed)將會被CRLF(回車換行,CarriageReturn)替代
該文件將在工做目錄中具備其原始行尾。
報這個警告時是因爲文件夾遠程不存在,可是不影響提交。咱們再執行一次就好。
(3).提交git commit
$ git commit -m "first example file" [master (root-commit) 0cecffa] first example file 1 file changed, 2 insertions(+) create mode 100644 example.txt
這個commit命令的參數 -m 是必不可少的,就是爲了添加本次提交文件的日誌,至關於作一個標記,以便於咱們在版本控制時用到。
tips:在git中只有存純文本文件,如.txt .java .md 不能存其餘文件,同時,這些純文本文件要是UTF-8編碼
2、版本控制
以本地倉庫爲例,講解版本控制
1)、咱們先講幾個概念
工做區和暫存區
工做區(Working Directory),就是是在咱們電腦上能看到的文件目錄,這裏個人那個/learngit就是一個工做區,在工做區中有不少的分支。
分支(Branching),顧名思義,就是相似於樹葉的分支。咱們將整個工做區比做主樹幹,分支的概念就更好地理解了。咱們如今就是在Git的主分支(master)上操做,後邊會講到分支管理。
咱們以前用mkdir learngit
命令建立的那個就是一個工做區,在工做區中有一個隱藏目錄.git
,這個就是Git的版本庫(Repository)。
暫存區,就是咱們當前正在操做的目錄,可是內容尚未保存在工做區中
2)、Git下修改文件
咱們把在Git下操做文件和如何把大象裝進冰箱中作類比(這是我本人很喜歡的一個學習方法):
(1).咱們修改當前工做區下的 example.txt 文件 (準備大象,確定有人會問,不用準備冰箱嗎?哈哈,Git就是這個冰箱了).
This is an example file, This is creat in Git. This is third line.
(2).每二步確定就是將大象裝進冰箱,咱們用git add
命令
但在把大象裝進冰箱前,咱們先學習幾個小命令
git status 查看當前git 的狀態
$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: example.txt no changes added to commit (use "git add" and/or "git commit -a")
修改了example.txt 文件
已經修改,可是這個修改沒有提交到時工做區,提示你用git add 或git commit
另外一個命令就是 git diff
用來查看修改先後兩個文件的不一樣,這個就不作演示了。
還有一個git checkout -- [文件名]
,撤銷修改,也就是說這個時候咱們忽然不想把大象裝進冰箱了,咱們只須要撤銷就行了。
$git checkout -- example.txt
這個命令執行完畢後不會有任何提示。 咱們接着用git status
查看下咱們的git狀態,就是說咱們的這個git沒有任何要commit的文件
$ git status On branch master nothing to commit, working tree clean
(3).好了,學完這幾個小插曲後,咱們繼續咱們的大象裝進冰箱(修改庫中文件)的最後一步,就是關閉冰箱門(git commit -m
)。
咱們剛剛執行了撤銷修改的操做,咱們要從新來一次。
This is an example file, This is creat in Git. This is third line.
$git add example.txt
$git commit -m "add third line"
3)、版本更換:真正的在多個版本以前切換
爲了文件測試,咱們多修改幾回這個文件,也就是多作幾個版本(此操做略,無非就是vim——add——commit)。
在你修改了好幾個版本以後,咱們用git log
命令來查看當前工做區(其實就是分支)狀態.
$ git log commit 7b0b4f5c4c9ffc053db65ed0d7835ae62a27e0b6 (HEAD -> master) Author: Lyn4ever <Lyn4ever29@163.com> Date: Fri Jun 7 00:23:54 2019 +0800 add fourth line commit 11b13721088ea653042af7986e0d5b1f1b29a9e9 Author: Lyn4ever <Lyn4ever29@163.com> Date: Fri Jun 7 00:16:12 2019 +0800 add third line commit 0cecffad8b547533728d2c1a9bef581c6c01f359 Author: Lyn4ever <Lyn4ever29@163.com> Date: Thu Jun 6 23:45:24 2019 +0800 first example file
這個很容易看明白的,就是如今有三個版本,這是一個倒序排序,也就是說,當前這個文件的版本就是最上邊的這個。commit 後邊跟着的那個就是版本號,緊接着兩行是做者和時間,再下邊就是咱們在commit -m 時寫的日誌了。(注意:你的文件id 確定和個人不同,在測試時要以你的爲準)
修改版本的命令是git reset --hard commit_id
,咱們就來試一試。
先確保當前git中沒有未commit的文件,而後查看文件內容
$ git status On branch master nothing to commit, working tree clean
$ cat example.txt This is an example file, This is creat in Git. this is third line. this is forth line.
好了,咱們就返回日誌爲"add third line"這個版本,其版本id爲:11b13721088ea653042af7986e0d5b1f1b29a9e9
$git reset --hard 11b13721088ea653042af7986e0d5b1f1b29a9e9 HEAD is now at 11b1372 add third line
看提示,很明顯,就是經成功了。咱們再看一個
$ git status On branch master nothing to commit, working tree clean
$ cat example.txt This is an example file, This is creat in Git. this is third line.
每次要寫這個id是否是很麻煩呢,咱們能夠只用前7個字符,可是還有一個更簡單的方法,就是用HEAD^
來代替。HEAD 表示當前版本,往前幾個版本,就寫幾個^。上一個版本就是HEAD^
,上上一個就是HEAD^^
這時,咱們再看一個咱們的git log
$ git log commit 11b13721088ea653042af7986e0d5b1f1b29a9e9 (HEAD -> master) Author: Lyn4ever <Lyn4ever29@163.com> Date: Fri Jun 7 00:16:12 2019 +0800 add third line commit 0cecffad8b547533728d2c1a9bef581c6c01f359 Author: Lyn4ever <Lyn4ever29@163.com> Date: Thu Jun 6 23:45:24 2019 +0800 first example file
發現這個裏邊只有兩個了,我想回到add fourth line 那個版本,也是用一樣的方法,可是我找不到commit-id 怎麼辦?不急,git這麼強大的功能不會讓咱們失望的。咱們能夠用git reflog
查看git版本控制的操做歷史
$ git reflog 11b1372 (HEAD -> master) HEAD@{0}: reset: moving to 11b13721088ea653042af7986e0d5b1f1b29a9e9 7b0b4f5 HEAD@{1}: commit: add fourth line 11b1372 (HEAD -> master) HEAD@{2}: commit: add third line 0cecffa HEAD@{3}: commit (initial): first example file
這時,咱們找到了以前add fourth line 版本的id,就能夠了。
$git reset --hard 7b0b4f5
就這樣好了。git log
又發現了三個版本
$ git log commit 7b0b4f5c4c9ffc053db65ed0d7835ae62a27e0b6 (HEAD -> master) Author: Lyn4ever <Lyn4ever29@163.com> Date: Fri Jun 7 00:23:54 2019 +0800 add fourth line commit 11b13721088ea653042af7986e0d5b1f1b29a9e9 Author: Lyn4ever <Lyn4ever29@163.com> Date: Fri Jun 7 00:16:12 2019 +0800 add third line commit 0cecffad8b547533728d2c1a9bef581c6c01f359 Author: Lyn4ever <Lyn4ever29@163.com> Date: Thu Jun 6 23:45:24 2019 +0800 first example file
4)、刪除文件
刪除文件,其實就是另外一種修改操做,和修改是同樣的,先用rm file
來刪除,而後用git commit
來提交到工做空間中。
$rm example.txt
而後我咱們看一下狀態
$ git status On branch master Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: example.txt no changes added to commit (use "git add" and/or "git commit -a")
發現是deleted ,可是沒有commit。也就是已經把大象從冰箱中取出來了,可是沒有關冰箱門。因此咱們關閉冰箱門
先從庫中刪除
$ git rm example.txt rm 'example.txt'
而後提交
git commit -m "delete example"
而後,想查看這個文件,發現不在了。
$ cat example.txt cat: example.txt: No such file or directory
最後,咱們用以前的版本回退回去。
$ git reset --hard 7b0b4f5 HEAD is now at 7b0b4f5 add fourth line $ cat example.txt This is an example file, This is creat in Git. this is third line. this is forth line.
tips: 刪除文件一樣也是修改操做,也能夠在rm file後,但尚未git rm
和git commit
到git庫中前,可使用git checkout -- fileaname
撤銷