7. Git 基本操作

首先瓜客,簡單介紹一下 git tag 命令君纫,該命令可理解為 “打標簽或里程碑”狐树,本質(zhì)上和 branch焙压、stash 引用一樣,也是一個引用抑钟,記錄著提交 ID (或者創(chuàng)建 Tag 對象)涯曲,下面我們來操作一下:

  1. 打上標簽,標簽名為 old_practice在塔,并添加描述說明:
image.png
  1. 查看標簽記錄的最新的提交 ID
image.png
  1. 查看該最新 ID 所記錄的內(nèi)容:
image.png

打標簽之后幻件,可以執(zhí)行 git describe 命令,將最新提交顯示為一個容易記的名稱蛔溃,顯示的時候會選取離提交最近的 tag 為 ''基礎(chǔ)版本號''再附加距離 tag 的數(shù)字绰沥,以及該提交的哈希值縮寫。因為當前的提交就是 tag 所在的提交贺待,所以只會顯示出 tag 名稱 :

image.png

現(xiàn)在版本庫的狀態(tài)為暫存區(qū)和工作區(qū)都包含了修改徽曲,如下:

image.png

接下來,我們進行各種操作來演示:

  1. 先保存進度:
image.png
  1. 再用 git stash apply 恢復(fù)進度麸塞,因為這個進度記錄要多次使用秃臣,先不移除:
image.png

當前工作區(qū)的文件有:

image.png
  1. 直接在工作區(qū)刪除這些文件
image.png
image.png

可以看到本地文件已經(jīng)刪除掉了,但是暫存區(qū)和版本庫中的文件仍然存在哪工。

  1. 查看狀態(tài)看看:
image.png

輸出表示奥此,本地刪除想要反映到暫存區(qū),應(yīng)該使用 git rm 命令雁比,對不想刪除的文件稚虎,可執(zhí)行 git restore 讓文件在工作區(qū)中恢復(fù)。

也就是說偎捎,需要將刪除的工作的文件先 git rm 到暫存區(qū)再提交蠢终,才算真正的刪除,那么我們操作一下:

image.png
image.png

現(xiàn)在茴她,在最新的提交中寻拂,文件已經(jīng)被刪除了,但是在歷史提交中還是存在的败京,可以通過歷史提交來恢復(fù)相應(yīng)的文件,所以完全不用擔(dān)心梦染。

  1. 我們查一下上一次提交的文件列表:
image.png

可以通過文件路徑赡麦,直接查看歷史版本中的文件內(nèi)容:

image.png

我們之前將本地刪除的文件反映到暫存區(qū)時朴皆,用 git rm 并通過空格寫了一大堆文件名。其實是可以簡化操作的泛粹,通過 git add 再加上 -u 參數(shù)就可以遂铡,其含義是將本地改動(更改和刪除)的文件標記到暫存區(qū)。

下面我們用這種方式演示一下晶姊,首先要恢復(fù)到之前的狀態(tài)才行:

  1. 先回退到上一次提交的版本扒接,即丟掉最新的提交:
image.png
  1. 恢復(fù)之前保存的進度,-q 參數(shù)表示命令進入安靜模式:
image.png

對比之前的輸出:

image.png
  1. 再次刪除工作區(qū)本地的文件:
image.png
  1. 執(zhí)行 git add -u 命令可以將(被版本庫追蹤的)本地文件的變更(修改们衙、刪除)全部記錄到暫存區(qū)中 钾怔。【 git add 默認只記錄修改蒙挑,不包括新添加的文件和刪除的文件】 :
image.png

可以看到宗侦,工作區(qū)刪除的文件已經(jīng)被標記為下次提交時刪除了【D】,之前我們看到的都是修改 【M】忆蚀。

  1. 最后矾利,進行提交:
image.png
image.png

可以看到,本地和版本庫中的文件都不存在了馋袜。

一男旗、恢復(fù)文件 :

下面我們演示一下恢復(fù)已經(jīng)被刪除的指定文件,比如指定恢復(fù)被刪除掉的 Welcome.txt 文件欣鳖,我們都知道察皇,當前最新的提交中,文件已經(jīng)不存在观堂,只能從歷史提交中提取文件:

image.png

HEAD~1 让网,相當于 HEAD^,指上一次提交师痕,HEAD~2 溃睹,相當于 HEAD^^ ,指上上一次提交胰坟。執(zhí)行 git add 加上 -A 參數(shù)因篇,可以將工作區(qū)中所有修改、刪除和新增的文件都添加到暫存區(qū):

image.png

最后笔横,我們進行提交:

image.png

二竞滓、移動文件:

image.png

這里使用 git mv 命令完成操作,將 Welcome.txt 重命名為 README 吹缔,再進行提交商佑。改名之后提交的輸出能看到改名前后兩個文件的相似度,這里因為文件沒修改厢塘,所以相似度為 100% 茶没。

其實可以不使用 git mv 命令肌幽,而使用我們之前學(xué)過的 git rmgit add 兩條命令也能實現(xiàn)。

  1. 首先抓半,恢復(fù)到上一個版本:
image.png
image.png

可以看到喂急,welcome.txt 文件回來了。

  1. 這次不用 git mv 命令笛求,而是用 mv 直接更改本地文件:
image.png

輸出表示 廊移, welcome.txt 被刪除了【D】,有一個沒被追蹤的 README 【??】探入。

  1. README 文件增加一行狡孔,如下:
image.png
  1. 使用 git add -A 命令,相當于對修改文件執(zhí)行 git add 新症,對刪除文件執(zhí)行 git rm 步氏,對本地新增文件執(zhí)行 git add
image.png
  1. 最后,進行提交:
image.png

這里通過 rm 命令本地移動文件的方式徒爹,使用 add -A 命令之后荚醒,查看狀態(tài)時,并不是 renamed 而是新增和刪除文件隆嗅。

三界阁、文件忽略

我們之前打了一個標簽叫做 " old_practice" ,現(xiàn)在再次執(zhí)行 git describe 看一下版本號:

image.png

也就是說:當前工作區(qū)的版本是 "tag" 后的第三個版本胖喳,提交 ID 是 3dffaeb 泡躯。【注意:要忽略ID前面的g】

當我們不想所有的文件都被 Git 追蹤丽焊,想讓指定的文件忽略(Git 當它們不存在较剃,不進行版本控制)時。那么技健,可以在這個目錄下写穴,創(chuàng)建一個名為為 .gitignore 的文件 【注意,前邊有個點】雌贱,把那些要忽略的文件寫在其中啊送,文件名可以使用通配符,比如:

image.png

先新建一個文件欣孤,用于測試效果馋没,先不忽略這個文件,看看狀態(tài):

image.png

可以看到 .gitignore 和 ignore_teset.txt 文件都顯示沒被追蹤降传,需要 add 操作∨穸洌現(xiàn)在,我們在 .gitgnore 中添加一行 ignore_test.txt 婆排,再查看一下狀態(tài):

image.png

發(fā)現(xiàn) ignore_teset.txt 被忽略了声旺,無論對這個文件做什么操作控硼,Git 都不管了。

實際上艾少,可以把自身添加到忽略文件當中,如下:

image.png
image.png

工作區(qū)非常干凈翼悴。.gitignore 通常是要添加到版本庫中的缚够,這樣別人 clone 項目之后,也能夠正常忽略指定的文件鹦赎,即文件忽略在他人的工作區(qū)中同樣生效谍椅。因為 .gitignore 文件是共享式的。

查看狀態(tài)的時候古话,可以加上 --ignored 來顯示被忽略的文件:

image.png

如果不想共享雏吭,想本地獨享忽略呢?有兩種實現(xiàn)方式陪踩。

第一種:針對具體版本庫的 "獨享式" 忽略杖们。即通過在版本庫的 .git 目錄下的文件 .git/info/exclude 來設(shè)置文件忽略。

第二種:全局的 "獨享式"忽略肩狂。即通過 Git 的配置變量 core.excludesfile 指定一個忽略文件摘完,其設(shè)置的忽略對所有本地版本庫均有效

總結(jié):具體使用哪一種忽略方式傻谁,取決于實際的場景孝治。如果文件忽略對于所有使用此版本庫工作的人都有用,就在版本庫中創(chuàng)建一個 .gitignore 文件來建立忽略审磁。否則谈飒,如果工作區(qū)創(chuàng)建的是一個實驗性的目錄或文件,本不應(yīng)該讓他人知道态蒂,那么使用本地忽略杭措。

最后,我們簡單講一下 Git 忽略語法:

  1. 文件中的空行或以 # 開始的行會被忽略(相當于代碼編輯中的注釋)吃媒。
  2. 可以使用通配符瓤介,例如: * 代表任意多字符,? 代表一個字符赘那,[abc] 代表可選字符范圍等刑桑。
  3. 如果名稱的最前面是一個路徑分隔符 / ,表明要忽略的文件在此目錄下募舟,而非子目錄的文件祠斧。
  4. 如果名稱的最后面是一個路徑分隔符 / ,表明要忽略的是整個目錄拱礁。
  5. 名稱最前面添加一個 ! 琢锋,表示不忽略辕漂。

下面的文件忽略示例,包含了上述要點:

# 這是注釋行 -- 被忽略
*.a             # 忽略所有以 .a 為擴展名的文件
!lib.a          # 但是 lib.a 文件或目錄不要忽略吴超,即使前面設(shè)置了對 *.a 的忽略
/TODO           # 只忽略此目錄下的 TODO 文件钉嘹,其他目錄或當前目錄的子目錄中的 TTODO 文件不忽略
build/          # 忽略所有 build/ 目錄下的文件
doc/*.txt       # 忽略文件如 doc/notes.txt ,但是文件如 doc/server/arch.txt 不被忽略【沒寫到指定目錄級別不會被忽略】

總結(jié):文件 .gitignore 的作用范圍是其所處的目錄及其子目錄鲸阻,而且只對未被追蹤的文件有效跋涣,如果文件已經(jīng)加入版本庫了,忽略對其無效鸟悴。

四陈辱、文件歸檔

Git 提供了一個歸檔命令 git archive ,可以對任意提交對應(yīng)的目錄樹建立歸檔细诸,示例如下:

image.png

基于最新提交建立歸檔文件 latest.zip 沛贪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市震贵,隨后出現(xiàn)的幾起案子利赋,更是在濱河造成了極大的恐慌,老刑警劉巖猩系,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隐砸,死亡現(xiàn)場離奇詭異,居然都是意外死亡蝙眶,警方通過查閱死者的電腦和手機季希,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽纷,“玉大人式塌,你說我怎么就攤上這事∮呀” “怎么了峰尝?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長收恢。 經(jīng)常有香客問我武学,道長,這世上最難降的妖魔是什么伦意? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任火窒,我火速辦了婚禮,結(jié)果婚禮上驮肉,老公的妹妹穿的比我還像新娘熏矿。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布票编。 她就那樣靜靜地躺著褪储,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慧域。 梳的紋絲不亂的頭發(fā)上鲤竹,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音昔榴,去河邊找鬼宛裕。 笑死,一個胖子當著我的面吹牛论泛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛹屿,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屁奏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了错负?” 一聲冷哼從身側(cè)響起坟瓢,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犹撒,沒想到半個月后折联,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡识颊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年诚镰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祥款。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡清笨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刃跛,到底是詐尸還是另有隱情抠艾,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布桨昙,位于F島的核電站检号,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛙酪。R本人自食惡果不足惜齐苛,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桂塞。 院中可真熱鬧脸狸,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卿啡,卻和暖如春吟吝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颈娜。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工剑逃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人官辽。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓蛹磺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親同仆。 傳聞我的和親對象是個殘疾皇子萤捆,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容