一、Git安裝
Git 是開放源代碼的代碼托管?具,最早是在Linux下開發(fā)的。開始也只能應(yīng)?于Linux平臺,后?慢慢的被移植到windows下,現(xiàn)在,Git可以在Linux、Unix、Mac和Windows這??平臺上正常運(yùn)?了。
如果你的的平臺是centos,安裝git相當(dāng)簡單,以我的centos7.6為例:
sudo yum -y install git
我們還可以用下面的指令來查詢 git 的版本:
git --verison
二、創(chuàng)建本地倉庫
要提前說的是,倉庫是進(jìn)?版本控制的?個?件?錄。我們要想對?件進(jìn)?版本控制,就必須先創(chuàng)建?個倉庫。
創(chuàng)建?個 Git 本地倉庫對應(yīng)的命令為:
git init
注意命令要在?件?錄下執(zhí)?,例如:
我們發(fā)現(xiàn),當(dāng)前?錄下多了?個.git 的隱藏?件,.git ?錄是Git來跟蹤管理倉庫的,不要?動修改這個?錄??的?件,不然改亂了,就把Git倉庫給破壞了。
我們可以看看Git倉庫的內(nèi)容:
三、配置Git
當(dāng)安裝Git后?先要做的事情是設(shè)置你的用戶名稱和e-mail地址,這是?常重要的。配置命令為:
設(shè)置配置
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
刪除配置
git config [--global] --unset user.name
git config [--global] --unset user.email
# 把Your Name 改成你的昵稱
# 把email@example.com 改成郵箱的格式,只要格式正確即可。
其中--global
是?個可選項(xiàng)。如果使?了該選項(xiàng),表?這臺機(jī)器上所有的Git倉庫都會使?這個配置。如果你希望在不同倉庫中使?不同的 name 或 e-mail 可以不要--global
選項(xiàng),注意,執(zhí)?命令時必須要在倉庫?。
我們可以用git config -l
來查看配置:
四、認(rèn)識工作區(qū)、暫存區(qū)、本地庫
每個 Git 項(xiàng)目的根目錄下有一個 .git 目錄,它是 Git 默默進(jìn)行版本控制時讀寫的“數(shù)據(jù)庫”。下面有幾個概念:
- 工作區(qū):代碼所在目錄;
- 暫存區(qū):
.git/index
文件 - 本地倉庫:
.git
目錄;
一個典型的工作流程如下圖,綠色部分為工作區(qū)(Working Directory),對它進(jìn)行任何修改(包括:新建文件、刪除文件、文件重命名等)都和單純的修改文件一樣,不會涉及到版本控制。
通過新建或粘貼進(jìn)?錄的?件,并不能稱之為向倉庫中新增?件,?只是在?作區(qū)新增了?件。必須要通過使?git add 和 git commit 命令才能將?件添加到倉庫中進(jìn)?管理?。?!
暫存區(qū)是一個包含文件索引的目錄樹(.git/index
文件),記錄了文件的元數(shù)據(jù)(文件名、文件長度、修改時間等),而文件內(nèi)容則存放在 .git/objects
目錄下。
用 Git 進(jìn)行版本控制,實(shí)際上就是在工作區(qū)、暫存區(qū)、本地倉庫三個地方進(jìn)行文件信息的記錄。
五、添加文件
我們可以使用git add .
將當(dāng)前?錄下的所有?件改動添加到暫存區(qū),也可以添加指定文件或目錄:
添加?個或多個?件到暫存區(qū):
? git add [file1] [file2]
添加指定?錄到暫存區(qū),包括??錄:
? git add [dir]
此時我們發(fā)現(xiàn)objects
目錄下多了一個文件,而.git
目錄下也多了一個index
目錄:
然后再使用git commit
將暫存區(qū)的內(nèi)容添加到本地倉庫中:
提交暫存區(qū)全部內(nèi)容到本地倉庫中:
git commit -m "message"
提交暫存區(qū)的指定內(nèi)容到倉庫區(qū):
git commit [file1] [file2]... -m "message"
注意 git commit 后面的 -m 選項(xiàng),要跟上描述本次提交的 message,由用戶自己完成,
這部分內(nèi)容絕對不能忽略,并要好好描述,是用來記錄你的提交細(xì)節(jié),是給程序員看的
我們可以使用git log
或者git log --pretty=oneline
來查看歷史提交信息:
需要說明的是,我們看到的??串類似1c43…802的是每次提交的commit id (版本號),Git的commit id 不是1,2,3……遞增的數(shù)字,?是?個SHA1計(jì)算出來的?個?常?的數(shù)字,??六進(jìn)制表示。
接下來我們來看看.git
目錄的內(nèi)容:
-
index
就是我們的暫存區(qū),add后的內(nèi)容都是添加到這?的。 -
HEAD
就是我們的默認(rèn)指向master分?的指針。
而默認(rèn)的master分支,其實(shí)就是(這里保存了我們第一次提交的commit id): -
objects
為Git 的對象庫,??包含了創(chuàng)建的各種版本庫對象及內(nèi)容。當(dāng)執(zhí)?git add
命令時,暫存區(qū)的?錄樹被更新,同時?作區(qū)修改(或新增)的?件內(nèi)容被寫?到對象庫中的?個新的對象中,就位于.git/objects
?錄下,讓我們來看看這些對象有何?處:
查找objects
時要將commit id 分成2部分,其前2位是?件夾名稱,后38位是?件名稱。找到這個?件之后,?般不能直接看到??是什么,該類?件是使?sha(安全哈希算法)加密過的git cat-file 命令來查看版本庫對象的內(nèi)容:
這是.git
的整體結(jié)構(gòu):
六、修改文件
Git ?其他版本控制系統(tǒng)設(shè)計(jì)得優(yōu)秀,因?yàn)镚it跟蹤并管理的是修改,???件。
什么是修改??如你新增了??,這就是?個修改,刪除了??,也是?個修改,更改了某些字符,也是?個修改,,甚?創(chuàng)建?個新?件,也算?個修改。讓我們將ReadMe?件進(jìn)??次修改:
此時,倉庫中的ReadMe和我們?作區(qū)的ReadMe是不同的,如何查看當(dāng)前倉庫的狀態(tài)呢?我們使用git status
:
上?的結(jié)果告訴我們,ReadMe被修改過了,但還沒有完成添加與提交。
?前,我們只知道?件被修改了,如果能知道具體哪些地?被修改了,就更好了。有同學(xué)會說,我剛改的我知道呀!可是,你還記得你三天前寫了什么代碼嗎?或者沒寫?
git diff [file]
命令?來顯?暫存區(qū)和?作區(qū)?件的區(qū)別,顯?的格式正是Unix通?的diff 格式。也可以使?git diff HEAD -- [file]
命令來查看版本庫和?作區(qū)?件的區(qū)別。知道了對ReadMe做了什么修改后,再把它提交到本地倉庫就放?多了。
我們git add 、 commit
后,工作區(qū) clean,沒有文件需要提交了!
七、版本回退
執(zhí)?git reset
命令?于回退版本,可以指定退回某?次提交的版本。要解釋?下“回退”本質(zhì)是要將版本庫中的內(nèi)容進(jìn)?回退,?作區(qū)或暫存區(qū)是否回退由命令參數(shù)決定:
命令語法格式為:git reset [-soft|-mixed|-hard] [HEAD]
--soft 參數(shù)對于?作區(qū)和暫存區(qū)的內(nèi)容都不變,只是將版本庫回退到某個指定版本。
--mixed 為默認(rèn)選項(xiàng),使?時可以不?帶該參數(shù)。該參數(shù)將暫存區(qū)的內(nèi)容退回為指定提交版本內(nèi)容,?作區(qū)?件保持不變。
--hard 參數(shù)將暫存區(qū)與?作區(qū)都退回到指定版本。切記?作區(qū)有未提交的代碼時不要?這個命令,因?yàn)?作區(qū)會回滾,
你沒有提交的代碼就再也找不回了,所以使?該參數(shù)前?定要慎重。
HEAD 可直接寫成commit id,表?指定退回的版本
HEAD 表?當(dāng)前版本 HEAD~0 表?當(dāng)前版本
HEAD^ 上?個版本 HEAD~1 上?個版本
HEAD^^ 上上?個版本 HEAD~2 上上?個版本
我們對ReadMe文件進(jìn)行3次提交,形成3個版本的ReadMe:
wml@hcss-ecs-e18a testgit]$ vim ReadMe
[wml@hcss-ecs-e18a testgit]$ git add ReadMe
[wml@hcss-ecs-e18a testgit]$ git commit -m 'version1'
[master b20581a] version1
1 file changed, 1 insertion(+)
[wml@hcss-ecs-e18a testgit]$ vim ReadMe
[wml@hcss-ecs-e18a testgit]$ git add ReadMe
[wml@hcss-ecs-e18a testgit]$ git commit -m 'version2'
[master f7933bd] version2
1 file changed, 1 insertion(+)
[wml@hcss-ecs-e18a testgit]$ vim ReadMe
[wml@hcss-ecs-e18a testgit]$ git add ReadMe
[wml@hcss-ecs-e18a testgit]$ git commit -m 'version3'
[master 8f06c3b] version3
1 file changed, 1 insertion(+)
然后我們查看提交記錄:
[wml@hcss-ecs-e18a testgit]$ git log --pretty=oneline
8f06c3b610971c0d8ef6694e0b1ca176e0317ef0 version3
f7933bd62a5abac4ac568e26ecbaf36adb279479 version2
b20581a5d7b7e59ba701d7ac878c82f380b55a1e version1
5c455e504433e0d7e2262f8a347a90dd1364e6f8 添加一些數(shù)據(jù)
1c435239ffe35b1dd3f763d618d9d48acf6b7802 第一次提交
現(xiàn)在,如果我們在提交完version3后,發(fā)現(xiàn)version3編寫錯誤,想回退到version2,重新基于version 2 開始編寫。由于我們在這?希望的是將?作區(qū)的內(nèi)容也回退到要?到–hard 參數(shù),示例如下:
如果我們后悔了呢?還能撤銷回退到version3嗎?如果我們能夠找到version3的commit id,那么就可以!如果我們在終端的 git log
中找不到了,我們還能用git reflog
來查找最近執(zhí)行的指令:
Git 版本回退的速度非???,,因?yàn)镚it 在內(nèi)部有個指向當(dāng)前分?(此處是master)的HEAD指針,
refs/heads/master
?件?保存當(dāng)前 master 分?的最新commit id,當(dāng)我們在回退版本的時候,Git 僅僅是給refs/heads/master
中存儲?個特定的version。
八、撤銷修改
1.對于?作區(qū)的代碼,還沒有add
例如我們向ReadMe文件中添加幾行數(shù)據(jù):
[wml@hcss-ecs-e18a testgit]$ cat ReadMe
aaa
version1
version2
[wml@hcss-ecs-e18a testgit]$ vim ReadMe
[wml@hcss-ecs-e18a testgit]$ cat ReadMe
aaa
version1
version2
safasdfasf
agsdgsdg
gasdgasdg
gasdgasdga
adsgasg
我們可以直接刪除(效率不高),也可以通過git checkout -- [file]
讓工作區(qū)的文件回到最近一次 add
或 commit
時的狀態(tài)。
2.已經(jīng)add,但沒有commit
我們向ReadMe文件中添加幾行數(shù)據(jù),用git add
添加到暫存區(qū):
[wml@hcss-ecs-e18a testgit]$ cat ReadMe
aaa
version1
version2
[wml@hcss-ecs-e18a testgit]$ vim ReadMe
[wml@hcss-ecs-e18a testgit]$ cat ReadMe
aaa
version1
version2
fsdafdafsga
gasdgasdg
adsgagsdgas
gasdgsagas
gdasgasdgas
[wml@hcss-ecs-e18a testgit]$ git add ReadMe //add到緩存區(qū)
[wml@hcss-ecs-e18a testgit]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: ReadMe
#
我們的做法如下:
3.已經(jīng)add,并且已經(jīng)commit
我們向ReadMe文件中添加幾行數(shù)據(jù),用git add
添加到暫存區(qū),再用git commit
提交到版本庫。
[wml@hcss-ecs-e18a testgit]$ cat ReadMe
aaa
version1
version2
[wml@hcss-ecs-e18a testgit]$ vim ReadMe
[wml@hcss-ecs-e18a testgit]$ cat ReadMe
aaa
version1
version2
fsadfsdg
gdasgsd
gadsgdsg
gasdgasdgasgg
[wml@hcss-ecs-e18a testgit]$ git add ReadMe
[wml@hcss-ecs-e18a testgit]$ git commit ReadMe -m 'first commit'
[master bf00595] first commit
1 file changed, 4 insertions(+)
我們的做法如下:
九、刪除?件
在Git中,刪除也是?個修改操作,如果我們想刪除ReadMe文件:
此時,?作區(qū)和版本庫就不?致了,要刪?件,?前除了要刪?作區(qū)的?件,還要清除版本庫的?件。
走到這,一般有兩種情況:誤刪了或者沒刪完!
對于誤刪,用git checkout -- [file]
恢復(fù):文章來源:http://www.zghlxwxcb.cn/news/detail-843992.html
對于沒刪完,這時就需要使?git rm
從暫存區(qū)和?作區(qū)中刪除,并且commit
:文章來源地址http://www.zghlxwxcb.cn/news/detail-843992.html
到了這里,關(guān)于Git的基本操作(安裝Git,創(chuàng)建本地倉庫,配置Git,添加、修改、回退、撤銷修改、刪除文件)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!