新手學習Git之在本地使用Git

每一個開發人員應該都會一個版本管理工具,在Git和SVN中,我選擇以Git,如下是個人一些心得java

什麼是 Git

Git是目前世界上最早進的分佈式版本控制系統(沒有之一)。linux

1、Git安裝

1)、linux下安裝:git

Ubuntu Linux,經過一條sudo apt-get install git就能夠直接完成Git的安裝,很是簡單。vim

2)、windows下安裝:windows

Git官網 下載,而後所有選默認,一直點next就能夠分佈式

2.首次使用的一些設置

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/

好了,你的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 rmgit commit到git庫中前,可使用git checkout -- fileaname撤銷

相關文章
相關標籤/搜索