安裝
Debain系統(tǒng)使用sudo apt install git
命令安裝
安裝完成后使用下列命令設(shè)置用戶名及郵箱:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
創(chuàng)建版本庫(kù)
建立新目錄:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/XXX/learngit
設(shè)置當(dāng)前目錄為倉(cāng)庫(kù):
$ git init
Initialized empty Git repository in /Users/XXX/learngit/.git/
添加文件到版本庫(kù)
新建一個(gè)readme.txt
文件跃须,內(nèi)容如下:
Git is a version control system.
Git is free software.
把一個(gè)文件放到GIt倉(cāng)庫(kù)共兩步反璃。
第一步,添加文件:
$ git add readme.txt
第二步,遞交文件及說(shuō)明:
$ git commit -m "wrote a readme file"
版本控制
修改readme.txt
文件并提交:
Git is a distributed version control system.
Git is free software.
使用git status
命令查看倉(cāng)庫(kù)狀態(tài)
使用git diff
比較各版本差異
版本回退
再次修改readme.txt
并提交:
Git is a distributed version control system.
Git is free software distributed under the GPL.
使用git log
查看提交日志
使用git reset
回退版本(HEAD表示當(dāng)前版本现使,HEAD^表示上一版本,以此類推)
$ git reset --hard HEAD^
要回到append GPL
這一版本侣灶,可以通過(guò)git reflog
查找commit id
倔既,并通過(guò)git reset
命令回退,如:
$ git reflog
ac816fd HEAD@{2}: reset: moving to HEAD^
6440cfb HEAD@{3}: commit: append GPL
ac816fd HEAD@{4}: commit: add distributed
7e84cca HEAD@{5}: commit (initial): wrote a readme file
此處得到commit id: 6440cfb
$ git reset --hard 6440cfb
HEAD 現(xiàn)在位于 6440cfb append GPL
完成回退
工作區(qū)與暫存區(qū)
再次修改readme.txt
:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
并在工作區(qū)新建LINCESE
文件切心。
使用兩次git add
命令將readme.txt
和LINCESE
都添加后飒筑,暫存區(qū)就會(huì)變成以下?tīng)顟B(tài):
git add
命令實(shí)際上就是把要提交的所有修改放到暫存區(qū)(Stage),然后绽昏,執(zhí)行git commit
就可以一次性把暫存區(qū)的所有修改提交到分支协屡。一旦提交后,如果又沒(méi)有對(duì)工作區(qū)做任何修改全谤,那么工作區(qū)就是“干凈”的》粝現(xiàn)在版本庫(kù)變成了這樣,暫存區(qū)就沒(méi)有任何內(nèi)容了:
管理修改
與其他版本控制系統(tǒng)不同认然,Git跟蹤并管理的是修改补憾,而非文件。
第一步卷员,對(duì)readme.txt做一個(gè)修改盈匾,比如加一行內(nèi)容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.
然后,添加到暫存區(qū)毕骡。
$ git add readme.txt
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#
然后削饵,再修改readme.txt:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
提交:
$ git commit -m "git tracks changes"
[master bbbc32b] git tracks changes
1 file changed, 1 insertion(+)
提交后岩瘦,再看看狀態(tài):
$ 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: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
發(fā)現(xiàn)第二次的修改未被提交。理由如下:
第一次修改 -> git add -> 第二次修改 -> git commit
Git管理的是修改窿撬,當(dāng)使用git add命令后启昧,在工作區(qū)的第一次修改被放入暫存區(qū),準(zhǔn)備提交劈伴,但是箫津,在工作區(qū)的第二次修改并沒(méi)有放入暫存區(qū),所以宰啦,git commit只負(fù)責(zé)把暫存區(qū)的修改提交了,也就是第一次的修改被提交了饼拍,第二次的修改不會(huì)被提交赡模。
提交后,用git diff HEAD -- readme.txt
命令可以查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別:
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
可見(jiàn)师抄,第二次修改確實(shí)沒(méi)有被提交漓柑。
如要提交則應(yīng)該先添加到暫存區(qū),再提交叨吮。
撤銷修改
如果需要修改的內(nèi)容還未被添加到暫存區(qū)辆布,git checkout -- file
可以丟棄工作區(qū)的修改。命令git checkout -- readme.txt
意思就是茶鉴,把readme.txt
文件在工作區(qū)的修改全部撤銷锋玲,這里有兩種情況:
一種是
readme.txt
自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在涵叮,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài)惭蹂;
一種是
readme.txt
已經(jīng)添加到暫存區(qū)后,又作了修改割粮,現(xiàn)在盾碗,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之舀瓢,就是讓這個(gè)文件回到最近一次
git commit
或git add
時(shí)的狀態(tài)廷雅。
如果需要修改的內(nèi)容已經(jīng)被添加到暫存區(qū),但是還未被提交京髓,可以用命令git reset HEAD file
可以把暫存區(qū)的修改撤銷掉(unstage)航缀,重新放回工作區(qū)。
git reset
命令既可以回退版本朵锣,也可以把暫存區(qū)的修改回退到工作區(qū)谬盐。當(dāng)我們用HEAD
時(shí),表示最新的版本诚些。
如果要修改的內(nèi)容已被提交飞傀,則參考版本回退章節(jié)內(nèi)容皇型。
刪除文件
在Git中,刪除也是一個(gè)修改操作砸烦。
如果要?jiǎng)h除版本庫(kù)中文件的弃鸦,使用git rm
并git commit
洗鸵。
如果要恢復(fù)本地誤刪文件的棕所,則使用git checkout -- <file>
來(lái)恢復(fù)到上次提交的狀態(tài)。