最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

《穿越時(shí)空的git》之創(chuàng)建版本庫(kù)和常用命令操作

2022-10-31 15:14 作者:愛(ài)測(cè)軟件測(cè)試  | 我要投稿

Git 是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。Git 強(qiáng)大的分支管理,遠(yuǎn)遠(yuǎn)超過(guò) SVN。那 git 如何創(chuàng)建版本庫(kù)?如何進(jìn)行一些常用的操作呢?欲知答案如何,請(qǐng)看下文分解。
小時(shí)候看過(guò)一部印象很深的劇叫做《穿越時(shí)空的愛(ài)戀》,今日也厚著臉皮導(dǎo)演一部《穿越時(shí)空的git》,不上映,純屬自嗨!
what is 版本庫(kù)?無(wú)論我們平常使用git的頻率如何,但是從事IT這個(gè)行業(yè)的小伙伴一定經(jīng)常聽(tīng)到有人在說(shuō),哪個(gè)哪個(gè)牛X的項(xiàng)目在哪個(gè)倉(cāng)庫(kù),哪個(gè)項(xiàng)目的倉(cāng)庫(kù)被人惡意添加issue(之前就聽(tīng)說(shuō)了阿波羅計(jì)劃的代碼倉(cāng)庫(kù)中issue被很多無(wú)關(guān)的中文評(píng)論占樓~哎,咱們測(cè)試工程師一定不要這樣做,為這個(gè)行業(yè)盡一份力);

說(shuō)了這么多廢話,其實(shí)我們平常說(shuō)的倉(cāng)庫(kù)就是版本庫(kù),版本庫(kù)又名倉(cāng)庫(kù),英文名叫repository,相信很多用GitHub的小伙伴經(jīng)??吹竭@個(gè)單詞;

我就簡(jiǎn)單的把它理解成一個(gè)目錄文件夾,里面可以放各種文件,和平常的使用管理一樣,可以刪除、修改;但是Git的”文件夾“更強(qiáng)大一點(diǎn),它記性好-Git可以"記住"整個(gè)管理的歷史,還能”存檔“。
如何創(chuàng)建一個(gè)版本庫(kù),很簡(jiǎn)單:

  • 1)選擇一個(gè)路徑(you like just ok!),創(chuàng)建一個(gè)空目錄

$ mkdir mygit $ cd mygit?

$ pwd?

/Users/qinzhen/mygit?

?#這里就是我的Mac上創(chuàng)建的倉(cāng)庫(kù)地址了

  • 2)倉(cāng)庫(kù)地址創(chuàng)建好了,現(xiàn)在就是一個(gè)普通的文件夾,后使用git init命令將它變成”Git文件夾“,也就是把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù)

$ git init?

Initialized empty Git repository in /Users/qinzhen/mygit/.git/

它會(huì)提示說(shuō)在你的目錄下創(chuàng)建了一個(gè)空的Git倉(cāng)庫(kù),并且目錄下多了一個(gè).git,這個(gè)時(shí)候就算創(chuàng)建完成了。

在看命令之前先來(lái)用一張圖了解幾個(gè)概念,可以方便理解和記憶:

  • 工作區(qū)(Working Directory)

  • 臨時(shí)倉(cāng)庫(kù)(暫存區(qū),Staging Area)

  • Git倉(cāng)庫(kù)(Repository)
    我們就是先在工作區(qū)進(jìn)行文件的編輯操作;然后add到臨時(shí)倉(cāng)庫(kù),可以add多個(gè);最后再commit一起提交到倉(cāng)庫(kù)中。
    接下來(lái)正式進(jìn)入實(shí)操:
    1)在mygit路徑下,創(chuàng)建文件readme.txt,輸入以下內(nèi)容:

I want to study Git

2)利用git add命令將文件提交到臨時(shí)倉(cāng)庫(kù)(運(yùn)行成功不會(huì)輸出任何消息,看不到輸出不要慌~)

$ git add readme.txt

3)再用git commit命令將文件從暫存區(qū)提交到倉(cāng)庫(kù)去

localhost:mygit qinzhen$ git commit -m "study git"?

[master 64f5ced] study git?

1 file changed, 2 insertions(+), 2 deletions(-)

命令解釋:

-m : 添加注釋,對(duì)本次提交寫一個(gè)說(shuō)明

1 file changed :

1個(gè)文件被改變,也就是readme.txt;?

2 insertions(+):?

2行插入了內(nèi)容,也就是我們輸入的兩行內(nèi)容?

2 deletions(-):?

2行內(nèi)容缺失了,因?yàn)槲沂前裷eadme.txt文件里原有的內(nèi)容刪除后添加的內(nèi)容,

所以會(huì)有次改動(dòng)提示,若是完全新建的就只會(huì)有添加的記錄

  • 1)我們先用git status查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)

localhost:mygit qinzhen$ git status

On branch master?

nothing to commit, working tree clean

現(xiàn)在表示在一個(gè)master分支上沒(méi)有可提交的東西,工作目錄當(dāng)前是干凈的

  • 2)修改readme.txt文件:

I want to study Git very much.

  • 3)再使用git status查看

localhost:mygit qinzhen$ 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")

這時(shí)候可以看到文件已經(jīng)被修改了,但是并沒(méi)有被add和commit;

  • 4)再使用git diff(different)命令來(lái)查看當(dāng)前操作和之前的操作有何區(qū)別之處,修改了哪里:

localhost:mygit qinzhen$ git diff?

diff --git a/readme.txt b/readme.txt?

index 225e15a..8080bd8 100644?

--- a/readme.txt?

+++ b/readme.txt

@@ -1,2 +1,2 @@

?I am a test engineer.?

-I want to study Git.

+I want to study Git very much.

可以看到我在第二行增加了very much

  • 1)我們先將剛才修改好的文件提交到倉(cāng)庫(kù)中:

$ git add readme.txt

$ git commit -m "very much"

?[master 7582a45] very much?

?1 file changed, 1 insertion(+), 1 deletion(-)

  • 2)我們?cè)偈褂胓it log命令來(lái)看看之前都干了些什么:

$ git log

commit 7582a45a1acd9f5540f381d6e9bb7c9d38e74348 (HEAD -> master) Author: qinzhen <376057520@qq.com>?

Date: ? Thu Sep 19 16:48:31 2019 +0800 ?

??very much

commit 64f5cedd48745267e4e161c57f126a9230344339

Author: qinzhen <376057520@qq.com>?

Date: ? Thu Sep 19 16:05:40 2019 +0800 ? ?

study git

在git log命令后,我們可以看到之前的提交commit歷史,每一次提交都分配了唯一的commit id,這個(gè)id就是我們回到過(guò)去的關(guān)鍵,就相當(dāng)與科幻電影中回到過(guò)去的某個(gè)時(shí)期

3.1)HEAD——現(xiàn)在,我如果想回到study git的”時(shí)期“,可以使用git reset --hard HEAD^

$ git reset --hard HEAD^?

HEAD is now at 64f5ced study git

$ cat readme.txt

?I am a test engineer.

I want to study Git.

這個(gè)時(shí)候我們可以看到,已經(jīng)成功的回到了study git的”時(shí)期“,very much已經(jīng)消失不見(jiàn)
命令解釋:

如果回到過(guò)去不好理解的話,也可以理解為存檔,本人小時(shí)候喜歡玩一款電腦游戲叫做紅色警戒, 打任務(wù)戰(zhàn)的時(shí)候每過(guò)一關(guān)前就會(huì)存檔一次,這樣就方便”死“了之后可以回到指定關(guān)卡重新再來(lái) ^代表上一個(gè)存檔,^^代表上上個(gè)存檔,如果想反會(huì)至上100個(gè)版本的話可以直接使用HEAD~100果回到過(guò)去

3.2)commit id——現(xiàn)在再修改文件,在第一行添加I can fly,然后add、commit:

I am a test engineer,I can fly.

I want to study Git.

$ git add readme.txt?

$ git commit -m "I can fly"?

[master 9c32701] I can fly?

1 file changed, 1 insertion(+), 1 deletion(-)

git log 查看修改提交日志

$ git log

?commit 9c327016eec10a6db7f9b75ecb705df417b6508c (HEAD -> master)?

Author: qinzhen <376057520@qq.com>

Date: ? Thu Sep 19 17:06:10 2019 +0800 ??

?I can fly?

commit 64f5cedd48745267e4e161c57f126a9230344339?

Author: qinzhen <376057520@qq.com>

Date: ? Thu Sep 19 16:05:40 2019 +0800 ?

??study git

上面說(shuō)了可以利用commit id回到過(guò)去,現(xiàn)在咱們就來(lái)試試;使用git reset --hard 64f5ce…命令:

$ git reset --hard 64f5ced

?HEAD is now at 64f5ced study git?

?$ cat readme.txt

?I am a test engineer.?

I want to study Git.

從上面的結(jié)果可以看到,我們已經(jīng)通過(guò)commit id成功回到了過(guò)去,回到了那個(gè)沒(méi)有”I can fly“的年代;可以注意到的一點(diǎn)是,在寫commit id的時(shí)候并沒(méi)有寫全,只是寫了前面的一部分,git就可以找到了;
額。。??隙ㄓ腥艘獑?wèn)具體是幾位,說(shuō)實(shí)話~我也不知道0.0,也沒(méi)有專門去研究過(guò),前四五位?六七位?七八位?達(dá)到使用要求就好啦,能保證id唯一,稍微多復(fù)制幾個(gè)就可以了。。。

3.3)回到add前的年代——僅add文件到了暫存區(qū),并沒(méi)有commit;感覺(jué)好像是進(jìn)入到了add的另一重空間,在未來(lái)也找不到他,那想回到原來(lái)的”時(shí)期“的話,就可以使用git reset HEAD 把file丟掉

現(xiàn)在我的readme.txt文件內(nèi)容如下,并且已經(jīng)add到了暫存區(qū):

I am a test engineer.I can fly!?

I want to study Git.

$ git status?

On branch master?

Changes to be committed:?

??(use "git reset HEAD <file>..." to unstage)

?modified: ? readme.txt

使用git reset HEAD readme.txt命令將修改從add撤銷回來(lái)

$ git reset HEAD readme.txt?

Unstaged changes after reset:

M ?readme.txt?

$ 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")

3.4)這個(gè)時(shí)候又有個(gè)疑問(wèn),我只是把readme.txt從add后的暫存區(qū)給撤銷回來(lái)了,文件并沒(méi)有改變的;想要把文件的修改也撤回,就要使用git checkout – 命令了:

$ git checkout -- readme.txt?

$ cat readme.txt I am a test engineer.

?I want to study Git.

?$ git status?

On branch master?

nothing to commit, working tree clean

補(bǔ)充:一個(gè)文件已經(jīng)被提交到了版本庫(kù),有時(shí)候我們?cè)诠ぷ鲄^(qū)誤刪了某個(gè)文件(rm或手動(dòng)),這個(gè)時(shí)候版本庫(kù)中還是有這個(gè)文件的,就可以通過(guò)git checkout – 命令來(lái)”找回“;
如果真的想要從版本庫(kù)中將文件刪除,就要用到git rm和git commit命令了

1)沒(méi)錯(cuò),一般穿越的電影里到最后總是會(huì)找到方法返回未來(lái)的,git也不例外,除了可以回到過(guò)去(版本回退),也可以返回未來(lái)(回到新版本);
這里我們還是要借助于commit id來(lái)做,但是回退后再用git log已經(jīng)看不到未來(lái)時(shí)期的定位坐標(biāo)了(commit id):

$ git log?

commit 64f5cedd48745267e4e161c57f126a9230344339 (HEAD -> master)?

Author: qinzhen <376057520@qq.com>

Date: ? Thu Sep 19 16:05:40 2019 +0800 ?

??study git

2)這個(gè)時(shí)候就要用到git reflog命令了,記錄你之前走過(guò)的路:

$ git reflog?

64f5ced (HEAD -> master) HEAD@{0}: reset: moving to 64f5ced?

9c32701 HEAD@{1}: commit: I can fly?

64f5ced (HEAD -> master) HEAD@{2}: reset: moving to HEAD^?

7582a45 HEAD@{3}: commit: very much?

64f5ced (HEAD -> master) HEAD@{4}: commit: study git

在這里就可以看到之前I can fly 的commit id;這里順便提一句,上面說(shuō)了commit id不用寫全部,寫前面一部分,但是不確定具體寫幾位,這里看到git的log也只記錄了前7位,那就姑且算7位吧。。。

有了commit id就等于獲得了返回未來(lái)的坐標(biāo)信息和方法,電影也差不多到了大結(jié)局的時(shí)候了,本文也就要結(jié)束了,來(lái)個(gè)收尾:

$ git reset --hard 9c32701?

HEAD is now at 9c32701 I can fly?

?$ cat readme.txt

I am a test engineer,I can fly.?

I want to study Git.?

?$ git status?

On branch master?

nothing to commit, working tree clean


《穿越時(shí)空的git》之創(chuàng)建版本庫(kù)和常用命令操作的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
文化| 石家庄市| 衡阳县| 宁明县| 延长县| 华蓥市| 旬邑县| 巴林右旗| 荥经县| 黄平县| 成都市| 苍溪县| 海丰县| 普定县| 安顺市| 云安县| 秀山| 滨州市| 探索| 始兴县| 囊谦县| 长兴县| 卢氏县| 柳江县| 巴塘县| 邵武市| 界首市| 寿阳县| 庄浪县| 浦城县| 屏边| 安宁市| 沙雅县| 长乐市| 阳泉市| 太白县| 左贡县| 合阳县| 营山县| 肥城市| 句容市|