Git的簡(jiǎn)單使用

如果你有版本庫(kù)使用經(jīng)驗(yàn)蚓庭,則學(xué)習(xí)使用Git會(huì)非常容易毒嫡。但是分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有著很多不同莹妒,一旦適應(yīng)了Git就再也難回到SVN上了。

創(chuàng)建版本庫(kù)

進(jìn)入創(chuàng)建好的空目錄诈茧,執(zhí)行git init,瞬間就可以創(chuàng)建一個(gè)Git空版本庫(kù)捂掰。

創(chuàng)建空的Git版本庫(kù)

查看版本庫(kù)狀態(tài)

執(zhí)行git status敢会,查看當(dāng)前版本庫(kù)狀態(tài)。

查看版本庫(kù)狀態(tài)

添加文件到暫存區(qū)

執(zhí)行git add这嚣,將文件添加到版本庫(kù)鸥昏,開始受版本庫(kù)管理。

添加文件

從暫存區(qū)撤銷(unstage)

將文件添加到暫存區(qū)后姐帚,如果在提交前發(fā)現(xiàn)這個(gè)文件修改錯(cuò)誤了吏垮,則需要將文件從暫存區(qū)撤回。

從暫存區(qū)撤銷

提交文件到版本庫(kù)

執(zhí)行git commit -m "添加練習(xí)文件。"膳汪,將文件提交到版本庫(kù)像樊,并添加提交注釋。注意旅敷,提交注釋在實(shí)際工作中生棍,必須添加,以方便后續(xù)跟蹤修改內(nèi)容媳谁。

提交文件到版本庫(kù)

查看修改差異

執(zhí)行git diff涂滴,查看當(dāng)前修改了哪些內(nèi)容。

查看修改內(nèi)容

查看提交日志

執(zhí)行git log --pretty=oneline晴音,可以查看提交日志柔纵,以方便版本選擇。

查看提交日志

回退到指定版本

首先通過(guò)git log锤躁,查看版本情況搁料,再執(zhí)行git reset --hard a54c8e 退回到指定版本(第2個(gè)版本)。

回退到指定版本

如果回退到歷史版本后系羞,還需要“前進(jìn)”到更新的版本郭计,則需要先使用git reflog,來(lái)查看歷史命令椒振,然后找到文件對(duì)應(yīng)版本的commit_id昭伸,然后再使用git reset commit_id回退到指定的更新的版本。

回退到指定版本

Git的幾個(gè)重要概念

Git版本庫(kù)中有幾個(gè)重要的概念澎迎,必須掌握這些概念庐杨,才能正確了解Git的工作原理。

工作區(qū)(Working Directory)

就是你在電腦里能看到的目錄夹供,比如我的D:盤learngit文件夾就是一個(gè)工作區(qū):

工作區(qū)

版本庫(kù)(Repository)

工作區(qū)里面有一個(gè)隱藏目錄.git灵份,這個(gè)不算工作區(qū),而是Git的版本庫(kù)哮洽。

Git的版本庫(kù)里存了很多東西填渠,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master袁铐,以及指向master的一個(gè)指針叫HEAD揭蜒。

Git版本庫(kù)示例

前面講了我們把文件往Git版本庫(kù)里添加的時(shí)候,是分兩步執(zhí)行的:

  • 第一步是用git add把文件添加進(jìn)去剔桨,實(shí)際上就是把文件修改添加到暫存區(qū)屉更;
  • 第二步是用git commit提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支洒缀。

因?yàn)槲覀儎?chuàng)建Git版本庫(kù)時(shí)瑰谜,Git自動(dòng)為我們創(chuàng)建了唯一一個(gè)master分支欺冀,所以,現(xiàn)在萨脑,git commit就是往master分支上提交更改隐轩。

你可以簡(jiǎn)單理解為,需要提交的文件修改通通放到暫存區(qū)渤早,然后职车,一次性提交暫存區(qū)的所有修改。

所以stage是個(gè)相當(dāng)重要的概念鹊杖。例如悴灵,我修改了文件,但是還未使用git add將文件添加到暫存區(qū)骂蓖。當(dāng)需要更新的多個(gè)文件(對(duì)應(yīng)某一個(gè)bug)修改到位了积瞒,就可以將這一批文件添加到暫存區(qū),然后執(zhí)行git commit -m "提交說(shuō)明"將暫存區(qū)一起提交登下。

Git GUI中的文件修改情況

命令行會(huì)顯示Changes not staged for commit:茫孔,也就是說(shuō)文件修改了,但是還未添加到暫存區(qū)被芳。

Git Bash中的文件修改情況

隨著時(shí)間的推移缰贝,工作區(qū)中的文件有新增的有修改的,也有新加入進(jìn)來(lái)還未進(jìn)行跟蹤(Untracked)的筐钟。我們一旦對(duì)stage有了清晰的認(rèn)識(shí)揩瞪,就能根據(jù)需求(新功能,或修改的某個(gè)bug)區(qū)分出哪些是需要在一批中提交篓冲,而哪些則不需要一并提交。

修改暫存狀態(tài)

一旦提交宠哄,暫存區(qū)就又是干凈的了壹将。

提交后,空的暫存區(qū)

例如毛嫉,當(dāng)我們執(zhí)行了git commit -m "提交說(shuō)明"后诽俯,暫存區(qū)又變?yōu)榭铡.?dāng)然Untracked files還是在工作區(qū)中“未跟蹤”承粤。

提交后暴区,空的暫存區(qū)

管理修改而不是管理文件

Git管理的是修改,提交時(shí)接受的修改是stage中的辛臊。例如第一次修改 -> git add -> 第二次修改 -> git commit仙粱,這個(gè)時(shí)候,只提交了第一次修改彻舰。

結(jié)合Java EE開發(fā)中的JPA(Hibernate)對(duì)持久化對(duì)象的管理伐割,可以近似的認(rèn)為候味,stage中(通過(guò)git add添加)的修改,是“受管”的隔心,在工作區(qū)中但是沒(méi)有在stage中的修改是“游離態(tài)”的白群。受管的修改可以刷新(git commit -m "提交說(shuō)明")到持久化庫(kù)(版本庫(kù)中的某個(gè)版本)中。

理解Git是如何跟蹤修改的非常重要:每次修改硬霍,如果不add到暫存區(qū)帜慢,那就不會(huì)加入到commit中。

撤銷修改

當(dāng)有些時(shí)候唯卖,需要放棄某些修改時(shí)崖堤,可以方便的使用git checkout -- Git版本庫(kù)練習(xí)文件.txt命令,將版本庫(kù)中的文件再次檢出以撤銷工作區(qū)中對(duì)該文件的修改耐床。如果修改文件后添加到暫存區(qū)后又修改了該文件密幔,則恢復(fù)到添加到暫存區(qū)之后的狀態(tài)。

撤銷修改

如果要撤銷已添加到暫存區(qū)的修改撩轰,則需要先從暫存區(qū)撤回胯甩,然后再撤銷修改。

  • 場(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操作谤牡。

  • 場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí)副硅,想要撤銷本次提交,則使用命令git reset commit_id進(jìn)行版本回退翅萤,不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)恐疲。

刪除文件

在Git中,刪除也是一個(gè)修改操作套么。使用命令git rm file刪除文件培己,然后提交即可。

刪除文件

如果發(fā)覺(jué)刪除錯(cuò)了胚泌,則可以使用版本回退的方式git reset --hard HEAD^省咨,在工作區(qū)中恢復(fù)誤刪除(并提交到版本庫(kù))的文件。

通過(guò)版本回退诸迟,恢復(fù)文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茸炒,一起剝皮案震驚了整個(gè)濱河市愕乎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壁公,老刑警劉巖感论,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異紊册,居然都是意外死亡比肄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門囊陡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芳绩,“玉大人,你說(shuō)我怎么就攤上這事撞反⊥咨” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵遏片,是天一觀的道長(zhǎng)嘹害。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吮便,這世上最難降的妖魔是什么笔呀? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮髓需,結(jié)果婚禮上许师,老公的妹妹穿的比我還像新娘。我一直安慰自己僚匆,他們只是感情好微渠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著敛助,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屋确。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天续扔,我揣著相機(jī)與錄音攻臀,去河邊找鬼。 笑死纱昧,一個(gè)胖子當(dāng)著我的面吹牛刨啸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播识脆,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼设联,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼善已!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起离例,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤换团,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宫蛆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艘包,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年耀盗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了想虎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叛拷,死狀恐怖舌厨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忿薇,我是刑警寧澤裙椭,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站煌恢,受9級(jí)特大地震影響骇陈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瑰抵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一你雌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧二汛,春花似錦婿崭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至婿着,卻和暖如春授瘦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竟宋。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工提完, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丘侠。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓徒欣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蜗字。 傳聞我的和親對(duì)象是個(gè)殘疾皇子打肝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git脂新,從https:/...
    落魂灬閱讀 12,665評(píng)論 4 54
  • 前提: SVN屬于集中式管理:需要依賴網(wǎng)絡(luò)以及“中央管理庫(kù)”Git屬于分布式管理:不需要網(wǎng)絡(luò),任何人本地都是一個(gè)完...
    Eddiegooo閱讀 467評(píng)論 2 2
  • 本篇主要講Git 的一些基礎(chǔ)和一些在開發(fā)中比較常用的命令粗梭。比較適合初學(xué)和快速了解Git争便。 Git文件分類 Git中...
    weiweilong閱讀 624評(píng)論 0 2
  • 在測(cè)試app的頁(yè)面的時(shí)候,你會(huì)發(fā)現(xiàn)有一組元素使用的id相同楼吃,這個(gè)時(shí)候你怎么處理呢始花?比如我希望點(diǎn)擊下圖中的第二個(gè)標(biāo)題...
    輕情閱讀 1,318評(píng)論 0 0
  • 嘴欠和幽默完全是兩碼事,可總是有那么一些人把他們兩個(gè)搞混孩锡,觸碰了別人的底線酷宵,還要求別人和他一樣咧嘴大笑、拍手叫好躬窜。...
    有風(fēng)就好閱讀 981評(píng)論 0 2