Git知識(shí)簡(jiǎn)介

介紹

????Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),用以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。git是個(gè)工具,在linux里面也就類(lèi)似gcc這樣的工具一樣,是一個(gè)shell命令。

Git與GitHub區(qū)別

  • Git是版本控制工具
  • Github是一個(gè)平臺(tái),提供給用戶創(chuàng)建git倉(cāng)儲(chǔ)空間,保存(托管)用戶的一些數(shù)據(jù)文檔或者代碼等。

Git與CVS、SVN的區(qū)別

  • Git是分布式版本控制系統(tǒng),代碼提交是在本地的(如此速度就快),當(dāng)然生成補(bǔ)?。╬atch)然后push到遠(yuǎn)程服務(wù)器上是需要聯(lián)網(wǎng)的
  • CVS、SVN是集中式版本控制系統(tǒng),代碼提交都是提交到遠(yuǎn)程服務(wù)器上
  • CVS、SVN這樣的集中式版本控制系統(tǒng),它的完整代碼倉(cāng)庫(kù)(代碼倉(cāng)庫(kù)不僅僅只包含了代碼,還包含各個(gè)歷史版本的信息等)在中心服務(wù)器上,一旦這個(gè)中心服務(wù)器掛了,也就是完整的代碼倉(cāng)庫(kù)掛了</li>
  • Git沒(méi)有中心服務(wù)器的概念,每一個(gè)git客戶端(git節(jié)點(diǎn))都含有一個(gè)完整的代碼倉(cāng)庫(kù)(前提是你之前從遠(yuǎn)程git倉(cāng)庫(kù)fetch過(guò)代碼)

遠(yuǎn)程倉(cāng)庫(kù)、工作區(qū)、版本庫(kù)和暫存區(qū)

遠(yuǎn)程倉(cāng)庫(kù)

????就是在github或者在gitlab上的代碼??梢杂?strong>git pull和git push來(lái)進(jìn)行本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的同步操作

工作區(qū)(Working Directory)

????從項(xiàng)目中取出某個(gè)版本的所有文件和目錄,用以開(kāi)始后續(xù)工作的叫做工作目錄,也就是工作區(qū)

版本庫(kù)(Repository)

????工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是Git的版本庫(kù)。
????Git的版本庫(kù)里存了很多東西,其中最重要的就是稱(chēng)為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD。

暫存區(qū)(Stage)

????暫存區(qū)就是版本庫(kù)中的一個(gè)區(qū)域,具體參見(jiàn)上面的結(jié)構(gòu)圖

工作區(qū)、版本庫(kù)、暫存區(qū)之間的關(guān)系
  1. 使用git add把文件從工作區(qū)添加到版本庫(kù)中的暫存區(qū),git add命令可以多次用,或者使用git add file1 file2 ...
  2. 使用git commit提交代碼,就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
  3. 需要提交的文件修改通通放到暫存區(qū)(可能有多次的git add),然后,一次性提交暫存區(qū)的所有修改到當(dāng)前分支(git commit)

版本回退

????前提條件:已經(jīng)執(zhí)行g(shù)it commit命令了,但是沒(méi)有push到遠(yuǎn)程倉(cāng)庫(kù),用以下命令可以回退
????其實(shí)這個(gè)回退就是將本地的HEAD指針移動(dòng)到某個(gè)版本上而已,所以這個(gè)操作是非??斓摹?/p>

回退到上一個(gè)版本
  • 在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交3628164...882e1e0,上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^,當(dāng)然往上100個(gè)版本寫(xiě)100個(gè)^比較容易數(shù)不過(guò)來(lái),所以寫(xiě)成HEAD~100
  • 版本號(hào)沒(méi)必要寫(xiě)全,前幾位就可以了,Git會(huì)自動(dòng)去找。當(dāng)然也不能只寫(xiě)前一兩位,因?yàn)镚it可能會(huì)找到多個(gè)版本號(hào),就無(wú)法確定是哪一個(gè)了
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
回退到未來(lái)的某個(gè)版本
  • 使用git log命令查看提交記錄,找到需要回退版本的commit id
  • 如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作記錄(包括commit和reset的操作),包括已經(jīng)被刪除的commit記錄
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

git log則不能查看已經(jīng)刪除了的commit記錄

總結(jié)
  • HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個(gè)版本
  • 要重返未來(lái),用git reflog查看命令歷史,以便確定要回到未來(lái)的哪個(gè)版本

git reset –-soft:回退到某個(gè)版本,只回退了commit的信息,不會(huì)恢復(fù)到index file一級(jí)。如果還要提交,直接commit即可
git reset -–hard:徹底回退到某個(gè)版本,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容,撤銷(xiāo)的commit中所包含的更改被沖掉

撤銷(xiāo)修改

含義

????命令git checkout -- file意思就是,把file文件在工作區(qū)的修改全部撤銷(xiāo),這里有兩種情況:

  • 一種是file自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在,撤銷(xiāo)修改就回到和版本庫(kù)一模一樣的狀態(tài);
  • 一種是file已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷(xiāo)修改就回到添加到暫存區(qū)后的狀態(tài)。
    總之,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)。
場(chǎng)景
  • 場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file
  • 場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場(chǎng)景1,第二步按場(chǎng)景1操作</li>
  • 場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí),想要撤銷(xiāo)本次提交,版本回退一節(jié),不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)

git stash

????場(chǎng)景:當(dāng)你接到一個(gè)修復(fù)一個(gè)代號(hào)101的bug的任務(wù)時(shí),你想創(chuàng)建一個(gè)分支issue-101來(lái)修復(fù)它,但是,當(dāng)前正在dev上進(jìn)行的工作還沒(méi)有提交,Git還提供了一個(gè)stash功能,可以把當(dāng)前工作現(xiàn)場(chǎng)“儲(chǔ)藏”起來(lái),等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作

git stash list

????查看暫存區(qū)的所有暫存修改記錄

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
git stash apply stash@{X}

????取出相應(yīng)的暫存

git stash drop stash@{X}

????將記錄列表中取出的對(duì)應(yīng)暫存記錄刪除

git stash pop(推薦)

????取出最近一次暫存并刪除記錄列表中對(duì)應(yīng)記錄

分支管理

命令 含義
git branch 查看分支
git branch <name> 創(chuàng)建分支
git checkout <name> 切換分支
git checkout -b <name> 創(chuàng)建+切換分支
git merge <name> 合并某分支到當(dāng)前分支
git branch -d <name> 刪除分支
Bug分支

????在Git中,由于分支是如此的強(qiáng)大,所以,每個(gè)bug都可以通過(guò)一個(gè)新的臨時(shí)分支來(lái)修復(fù),修復(fù)后,合并分支,然后將臨時(shí)分支刪除。

Feature分支

????添加一個(gè)新功能時(shí),你肯定不希望因?yàn)橐恍?shí)驗(yàn)性質(zhì)的代碼,把主分支搞亂了,所以,每添加一個(gè)新功能,最好新建一個(gè)feature分支,在上面開(kāi)發(fā),完成后,合并,最后,刪除該feature分支。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 16,212評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 4,162評(píng)論 0 11
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,957評(píng)論 0 13
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,987評(píng)論 1 17
  • 111111
    生氣呢閱讀 254評(píng)論 0 0

友情鏈接更多精彩內(nèi)容