柚子快報激活碼778899分享:初識git · 基本操作
柚子快報激活碼778899分享:初識git · 基本操作
目錄
前言:
基本操作
檢查是否存在git
初始化倉庫
認(rèn)識三個區(qū)域
添加文件
查看.git文件
修改文件
版本回退
撤銷操作
刪除文件
我的博客即將同步至騰訊云開發(fā)者社區(qū),邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=2n55ocfzqhogk
前言:
Git 是一個開源的分布式版本控制系統(tǒng),最初由林納斯·托瓦茲(Linus Torvalds)于2005年開發(fā),目的是為了更好地管理Linux內(nèi)核的開發(fā)過程。與傳統(tǒng)的集中式版本控制系統(tǒng)(如SVN)不同,Git允許開發(fā)者在本地進(jìn)行完整的版本控制操作,包括提交、分支和合并,而無需依賴網(wǎng)絡(luò)連接到中央服務(wù)器。
Git的核心概念包括倉庫(Repository)、工作目錄(Working Directory)、暫存區(qū)(Staging Area)和提交(Commit)。開發(fā)者在本地倉庫中工作,修改文件后可以將這些變更添加到暫存區(qū),然后通過提交操作將這些變更記錄到倉庫的歷史記錄中。
Git還支持分支和合并操作,使開發(fā)者能夠在不影響主分支穩(wěn)定性的情況下進(jìn)行新功能開發(fā)或?qū)嶒炐孕薷?。分支操作是輕量級的,幾乎可以瞬間創(chuàng)建和切換,這極大地提高了開發(fā)效率和靈活性。
此外,Git還具有強(qiáng)大的網(wǎng)絡(luò)功能,支持通過HTTP、SSH等協(xié)議進(jìn)行倉庫的克隆、推送和拉取操作,使得多個開發(fā)者可以協(xié)同工作,共享代碼變更。
總之,Git以其分布式的設(shè)計、高效的分支和合并操作以及強(qiáng)大的網(wǎng)絡(luò)功能,成為了現(xiàn)代軟件開發(fā)中不可或缺的版本控制工具。
基本操作
由前言的介紹,我們知道git強(qiáng)大的地方來源于版本控制,那么除了版本控制,我們要學(xué)習(xí)的基本操作有:
認(rèn)識三個區(qū)域->添加文件->修改文件->版本回退->撤銷修改的三種情況->刪除文件。
這是本文的目標(biāo)。
檢查是否存在git
開始之前,我們應(yīng)該先檢查自己的機(jī)器里面是否存在git這個工具:
命令:git --version,可以查看git的版本,
ubuntu的系統(tǒng)下,刪除git的命令是:sudo apt remove git -y,此時查看:
那么ubuntu重新安裝git的命令為:sudo apt install git。
初始化倉庫
那么有了git這個工具,我們應(yīng)該新建一個倉庫,并且要對倉庫初始化,在圖形化界面中,我們新建倉庫的時候往往也是需要初始化的:
使用的命令是git init,此時初始化了倉庫之后,在當(dāng)前目錄下就會創(chuàng)建本地倉庫,標(biāo)志是.git。
此時.git創(chuàng)建好了之后,比較重要的是我們最好配置名字,以及郵箱等:
通過命令git config user.name 等,初始化自己的信息。
那么我們?nèi)绾慰磳?yīng)的配置信息呢?輸入命令:git config -l即可:
此時對應(yīng)的配置信息就打印出來了。
那么我們既然已經(jīng)創(chuàng)建了.git,我們不妨使用tree看一下這究竟是個什么玩意兒:
這就是對應(yīng)git的樹狀圖,當(dāng)然,里面有很多東西我們目前都不知道,不用急,咱也就先看看而已。
初始化配置的時候,我們還可以使用--global參數(shù),表示全局的,也就是這臺機(jī)器上的所有倉庫都可以使用這個配置:
那么為了測試,我們再創(chuàng)建一個倉庫:
驗證成功。
那么刪除對應(yīng)的配置也很簡單,使用unset即可:
但是不能一次性刪除多個,只能一個一個刪除:
倉庫的初始化配置就到這里。
認(rèn)識三個區(qū)域
git中的三個區(qū)域:
在git中,這三個區(qū)域,分別是工作區(qū),暫存區(qū),版本庫,三個區(qū)域的取名還是比較生動形象的。
工作區(qū),也就是平時我們存儲代碼的地方,暫存區(qū),也就是經(jīng)過一次add操作之后,代碼的臨時改動被存儲到了暫存區(qū),版本庫,代碼的更改都會放在這里面,并且是永久存儲的。
其中,工作區(qū)到暫存區(qū),需要Add,暫存區(qū)到版本庫,需要commit,但是我們平常使用圖形化界面的時候,上傳到遠(yuǎn)端倉庫還需要一個操作是push,目前我們學(xué)習(xí)的操作都沒有涉及push,都是在add和commit。
對于暫存區(qū),也有一種說法叫做索引,并且在暫存區(qū)和版本庫里面還有一種區(qū)域,叫做objects,沒錯,就是這個:
objects也就是對象的意思,這實際上是個對象庫,修改的工作區(qū)的內(nèi)容會寫入其中的git對象.
添加文件
我們添加文件有兩種方式,一種是git add 修改的文件名 ,一種是git add . ,這個.就是當(dāng)前目錄的所有意思,也就是當(dāng)前目錄的所有修改都要加上,add之后,通常伴有g(shù)it commit ,但是commit通常需要選項-m,-m的意思是提交日志,也就是:
這里需要注意的是,-m之后的描述是比較重要的,比如boss讓你寫了500個版本,如果每次commit的日志都是1,那么是很難進(jìn)行版本回退的,因為都是1,沒有描述具體添加還是刪除了哪些功能,版本控制就變得麻煩起來了。
commit之后,有對應(yīng)的介紹,1file changed ,一個文件改動了,0 insertions,代表沒有行數(shù)增加,0 deletions代表沒有行數(shù)減少。
我們也可以一次性,多添加多個文件:
這里需要再介紹一個命令,叫做git log,一般的軟件都是有日志的,可以理解為日記的意思,它會記錄該軟件發(fā)生的所有事:
其中HEAD -> master是什么我們暫時不用管,前面的很大的16進(jìn)制的數(shù)字是根據(jù)某種規(guī)則生成的,我們知道即可。
后面有對應(yīng)的Author,Email,以及對應(yīng)的日期,最后的就是提交的描述的。如果我們嫌打印出來的東西太多了,我們可以輸入git log --pretty=oneline:
也就是將每次的提及以一行的方式打印。
那么在add commit操作里面我們看到了極其龐大的式子,還有HEAD -> master,我們可以通過查看.git文件來了解它們。
查看.git文件
根據(jù)最開始的git圖:
我們現(xiàn)在不妨對比一下已經(jīng)commit兩次之后的git:
為什么暫存區(qū)還有一個名字叫做索引,就是因為我們commit之后,git之后新增了一個index,也就是暫存區(qū)的索引。
關(guān)于HEAD指針的問題,我們可以打印HEAD出來看看:
可以發(fā)現(xiàn)HEAD指針指向的就是master,那么master里面又有什么呢?再看看:
是一串很大的16進(jìn)制的數(shù)字,那么這串?dāng)?shù)字又是啥?我們可以使用指令來查看:
指令git cat-file -p [數(shù)字]:
出現(xiàn)了我們熟悉的信息,第一個是tree,不管先,parent是我們上次提交對應(yīng)的commit id,author等就不用介紹了,那么tree對應(yīng)的是什么呢?我們使用指令再看看:
這些就是對應(yīng)提交過的文件了,那么里面的數(shù)字又是什么意思呢?實際上是我們add之后,在文件里面進(jìn)行了修改的內(nèi)容,因為博主add的時候沒有加?xùn)|西,所以各位同學(xué)可以自行演示哦。
在git里面,對象庫里面存在的13的是對應(yīng)的對象。
修改文件
這里的修改文件并不是我們在git里面修改文件,我們查看修改文件之后git對應(yīng)的狀態(tài),我們現(xiàn)在在file1新增內(nèi)容:
此時使用指令git status:
此時file1文件變紅,圖形化界面也會有一個紅色提示符,此時,nothing added to commit ...也就是說暫存區(qū)沒有內(nèi)容需要commit的,那么此時我們使用指令git diff:
其中index索引后面的我們不管,a/file1表示改動前的fie1,b就是改動后的。
---也是改動前,那么-0,0, +1是代表的行數(shù)變化,后面打印出來了對應(yīng)的行增加了什么。
0,+1代表從改動后的0行開始新增1行。
這是修改文件。
這就是看的在暫存區(qū)和工作區(qū)之間的內(nèi)容區(qū)別,當(dāng)然也有暫存區(qū)和版本庫的,各位同學(xué)可以自己試試哦。
版本回退
版本回退作為git最重要的一個功能,現(xiàn)在就揭開對應(yīng)的熒幕,那么我們新造一個場景,重新提交一下文件,從file1到 file5 ,修改file1為Hello git ,到加上Hello world:
為了進(jìn)行版本回退,使用的函數(shù)是reset,對應(yīng)的選項有 --soft?--mixed --hard,默認(rèn)使用指令reset的時候選項是mixed,從soft到mixed到hard的,回退的情況是由輕到重的:
使用soft只會修改版本庫的內(nèi)容,mixed會修改暫存區(qū)和版本庫的內(nèi)容,hard會修改三個區(qū)的內(nèi)容,所以hard一定是要慎用的。因為可能別人正在工作區(qū)寫代碼呢,你一個hard,框的一下給人代碼全部干沒有了,這就是一件很悲催的事兒。
那么我們現(xiàn)在演示一下hard,其他兩個自然也就會了:
表示現(xiàn)在在當(dāng)前版本。
我們也可以直接用HEAD指針,HEAD^表示上個版本,^^代表上上個,也可以使用~ + 數(shù)字表示,~ + 1代表上一個版本:
當(dāng)我們成功回退到了上個版本,我們看看修改的file1的內(nèi)容是怎么樣的:
此時只有Hello git了,那么我們可以吃后悔藥不呢?可以的,我們?nèi)绻到y(tǒng)還沒有退出來,可以看到對應(yīng)的commit id,就可以:
此時:
那么如果我們的系統(tǒng)已經(jīng)退出來了,看不到對應(yīng)的id怎么辦?我們可以:
此時有個縮短的commit id,也可以直接用的,我們可以利用該commit id直接回退,那么為什么git的版本回退那么快呢?
這是因為:
每次commit之后,返回的commit id實際上是不同的git對象,master指針只需要改變一下指向即可。
撤銷操作
撤銷操作分為三種,新增的代碼還沒有add,新增的代碼已經(jīng)add了但是沒有commit,新增的代碼不僅add了還commit了,對應(yīng)只有這三種情況。
第一種情況:
如果我們還沒有add,并且新增的代碼并不是很多的情況下,我們不妨手動刪除,但是在企業(yè)中,代碼量都是比較多的,我們不能保證我們可以手動刪除完全正確,我們希望代碼回到最近一次add的時候,所以我們可以使用指令git checkout -- [filename]:
第二種情況:
已經(jīng)add了,但是還沒有commit,那么我們需要修改的就是暫存區(qū),這就有意思了,我們可以直接使用版本回退的指令,mixed,修改暫存區(qū)的內(nèi)容,但是不修改工作區(qū)的內(nèi)容,此時就變成了如何修改工作區(qū)的內(nèi)容,這不就回到了情況一了嗎?
第三種情況:
那就更簡單了,直接hard指令即可,只能說慶幸沒有push到遠(yuǎn)程倉庫吧,push了可就真的麻煩了,這里就相當(dāng)于版本回退的操作,就不做實例了。
刪除文件
刪除文件就簡單多了,我們對于普通的文件可以直接rm -rf,但是git里面,我們可以直接git rm filename:
這樣可以在工作區(qū)刪除對應(yīng)的文件。如果直接rm,代表的只是本地刪除了而已,倉庫沒有刪除,
此時git的狀態(tài)也會發(fā)生變化。
那么倉庫刪除了之后,commit一下:
此時,就干凈了許多。?
感謝閱讀!
柚子快報激活碼778899分享:初識git · 基本操作
文章鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。