git快速入門

1.關(guān)于版本控制

????????git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)钳吟,那么什么是版本控制呢躺孝?

? ? ? ? 假設(shè)現(xiàn)在祖搓,要寫一篇很長很長的word文檔,有時候想要刪除或更改某一個段落筋量,又怕恢復(fù)找不回之前版本烹吵,那么此時只能通過再新創(chuàng)建一個word文檔以便本分,然后不停的改毛甲,不停的備份年叮,改動多了就成了


????????一周過去了具被,自己看著一些亂七八糟的文件玻募,還要想之前做了哪些修改,這些不可怕一姿,可怕的是同事要幫忙填某些數(shù)據(jù)七咧,就得通過郵箱等形式發(fā)給他們跃惫,同事又得思考,改動了哪些地方艾栋,多麻煩爆存。? ? 此時我們就想要有一款軟件,能幫我們記錄每次文件的改動蝗砾,還可以同事協(xié)調(diào)合作先较,如果我們需要,就在軟件里瞄一眼悼粮,就能看到所有改動闲勺。就像下面這樣,于是乎就有了版本控制扣猫,省事菜循。


????????版本控制是一種記錄一個或多個文件的變化,版本控制系統(tǒng)(縮寫VCS)申尤,可以理解為一個“數(shù)據(jù)庫”癌幕,

它可以用來保存一個完整項目的版本,當(dāng)需要查看一個之前的版本時昧穿,版本控制系統(tǒng)可以顯示出當(dāng)前版本和上一版本的所有改動細(xì)節(jié)勺远。

關(guān)于集中式版本控制和分布式版本控制系統(tǒng)

? ? ? ? 在最初的CVS和SVN中,都是集中式版本控制系統(tǒng)时鸵,集中式版本控制系統(tǒng)谚中,有一個中央服務(wù)器,所有的版本庫都是集中存放在中央服務(wù)器中的寥枝,每個人在自己的電腦上干活宪塔,再添加提交到中央服務(wù)器上,這個中央服務(wù)器就像是一個一個圖書館囊拜,每個人借書某筐,再還書,如果今天圖書館關(guān)門了冠跷,那么所有人都沒法再借書南誊,意味著都沒法再工作,而且集中式版本控制系統(tǒng)最大的毛病是必須聯(lián)網(wǎng)才能工作蜜托,如果在局域網(wǎng)內(nèi)還好抄囚,如果是在互聯(lián)網(wǎng),遇到網(wǎng)速超慢的話橄务,可能提交一個很小的文件就得等很久幔托,這不嚴(yán)重影響工作效率啊,人都得急死。那么就有了git這種最先進(jìn)的分布式版本管理系統(tǒng)重挑,相比于集中式管理系統(tǒng)嗓化,分布式管理系統(tǒng)的容錯率更高,因為每個人的電腦里都有完整的版本庫谬哀,這樣也不用擔(dān)心什么某個人電腦壞了其他人干不了活之類的刺覆,但實際在使用分布式管理系統(tǒng)的時候,其實很少在兩個人之間的電腦上互推史煎,通常也有一臺類似于中央服務(wù)器的電腦谦屑,但這臺服務(wù)器的作用僅僅是方便大家的“交換”和修改,沒有他大家也一樣可以干活篇梭。

2.? ? 安裝git

Windows上安裝git直接從官網(wǎng)上下載就行?安裝git?伦仍,然后默認(rèn)安裝選項即可,因為git是分布式版本控制系統(tǒng)很洋,所以每個機器安裝完成之后都需要自報家門充蓝,就得在命令行輸入

$ git config --global user.name"Your Name"

$ git config --global user.email"email@example.com"

安裝完成后,然后是創(chuàng)建版本庫喉磁,類似于倉庫谓苟,簡單理解為一個目錄,這個目錄的所有文件都被git所管理起來协怒,每個文件的修改涝焙,刪除,git都能跟蹤孕暇。

創(chuàng)建版本庫? mkdir? name

如果是Windows用戶仑撞,還需要在命令行輸入 git init 讓這個版本庫變成git可以管理的倉庫。

添加文件到git倉庫

git add? <file>? 可以反復(fù)多次使用妖滔,添加多個文件隧哮,最后commit一次提交? git add . 表示提交所有文件

git commit -m <message> 完成提交

git log ????查看版本歷史,顯示最近提交提交歷史記錄座舍。

3.????關(guān)于版本回退

在git中沮翔,每一個版本就像是一個RPG游戲存檔,每通過一個新的關(guān)卡都會有一個存檔曲秉,又或者在打boss的時候采蚀,也需要先存?zhèn)€檔,以便沒打過死亡要從頭再來承二,在git當(dāng)中榆鼠,HEAD表示當(dāng)前版本,也就是最后提交的版本亥鸠,而HEAD^表示上一個版本妆够,HEAD^^表示上上一個版本,HEAD~n表示上n個版本。

git reset --hard HEAD^

但是在git中责静, head是一個指針昆咽,它指向當(dāng)前版本菩佑,當(dāng)我們從當(dāng)前版本回到上一個版本時,此時head又指向上一個版本宽涌,那么我們想回到最新的版本揩徊,又改怎么辦呢腰鬼?放心,在git中塑荒,有一種藥叫后悔藥熄赡,想吃隨時可以吃,我們只需要找到最新版本的commit id 就行了 通過git reflog命令齿税,可以查看記錄每次命令彼硫,于是乎我們找到最新版本的id又可以通過git reset --hard id 回到最新版本。

4.? ? git的暫存區(qū)

git有一個很重要的概念凌箕,就是暫存區(qū)拧篮,那么什么是暫存區(qū)呢?

我們先開工作區(qū)(Working directory)牵舱,所謂的工作區(qū)串绩,就是電腦里能看到的目錄,而在工作區(qū)下面還有個隱藏目錄芜壁,.git礁凡,在這個目錄下,有個stage(index)的暫存區(qū)慧妄,還有g(shù)it為我們自動創(chuàng)建的第一個分支master顷牌,以及指向master的指針Head,在我們修改完文件想要往版本庫里添加時塞淹,執(zhí)行g(shù)it add 操作韧掩,此時就是把修改完成的文件放在git的暫存區(qū)index里,最后通過commit一次性把所有暫存區(qū)的內(nèi)容提交到當(dāng)前分支中窖铡。git每一次修改疗锐,如果不用add添加到暫存區(qū)中,那就不會加入到commit中费彼。

5.? ? 關(guān)于git的標(biāo)簽

? ? ? ? 在git中滑臊,發(fā)布一個版本的時候,通常會給一個版本打上一個標(biāo)簽(tag)箍铲,這樣就確定了所修改的版本雇卷,雖然git有commit,對應(yīng)每一個commit_id號,可以找到某個版本关划,但實際上是一串亂七八糟的數(shù)字和字符小染,如果是v1.1

?v1.2這樣就很有意義了,tag就是一個更容易讓人記住的名字贮折,跟摸個commit綁定在一起裤翩。

? ? ? ? 創(chuàng)建標(biāo)簽? 首先切換到需要打標(biāo)簽的分支上? 然后git tag? <name>就可以新創(chuàng)建一個標(biāo)簽。

? ? ? ? 查看標(biāo)簽? ? git? tag? ?查看所有標(biāo)簽

? ? ? ? 標(biāo)簽不是按時間順序排列的调榄,而是按字母順序排列的踊赠,可以用git? show? <tagname>查看標(biāo)簽信息

? ? ? ? git? ? tag? ? -a? <tagname>? ?-m? ?"xxxx"? ? 可以指定標(biāo)簽信息備注

? ? ? ? 如果標(biāo)簽打錯了,也可以刪除? 每庆。? ? git? ?tag? ? -d? ? v1.0? ? 刪除v1.0標(biāo)簽

? ? ? ? 因為標(biāo)簽都只儲存到本地筐带,不會推送到遠(yuǎn)程,所以缤灵,打錯的標(biāo)簽可以在本地安全刪除伦籍。

? ? ? ? 如果要把某個標(biāo)簽推送到遠(yuǎn)程,可以用 git push? origin? ?<tagname> 例如:git push origin? v1.0

? ? ? ? 或者腮出,一次推送全部未推送到遠(yuǎn)程的本地標(biāo)簽鸽斟。git? push? origin? --tags

? ? ? ? 如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程倉庫,要刪除利诺,就得先從本地刪除富蓄,git? tag? -d? v1.0,然后再從遠(yuǎn)程刪除慢逾,

刪除命令也是push立倍,git push? origin? :refs/tags/v1.0。

6.? ? 關(guān)于分支

? ? ? ? 在git中侣滩,git把每一次提交的都串成一條時間線口注,這條時間線就是一個分支,也就是主分支master分支君珠,隨著不斷的提交寝志,這條時間線會越來越長。

? ? ? ? 嚴(yán)格來說策添,head不是指向提交材部,而是指向master指向的最新提交,每一次提交唯竹,master分支都會向前移動一步乐导,不斷提交,master分支也會越來越長浸颓。

當(dāng)我們新創(chuàng)建一個分支物臂,如dev分支旺拉,git會新建了一個dev指針,指向和master相同的提交棵磷,再把head指向dev蛾狗,就表示當(dāng)前分支在dev上,每次修改和提交就是針對dev分支了仪媒,這樣dev指針不斷的移動沉桌,head指向當(dāng)前提交的dev指針,而master指針不變规丽。工作區(qū)的內(nèi)容文件都沒有任何變化蒲牧。

假如我們在dev分支上完成工作了撇贺,就可以把dev 合并到master上赌莺,合并就是把master指向dev當(dāng)前的提交,合并完成后就可以刪除當(dāng)前的dev分支了松嘶,刪除dev分支就是把dev指針給刪除掉艘狭,刪除后,就只剩一條master主分支了翠订。


7.? ? git的常用命令

? ? ? ? git clone? ?clone 一個遠(yuǎn)程庫

? ? ? ? git? ?init? ? 創(chuàng)建一個新的本地庫

? ? ? ? git? ?remote add origin xxx? 將本地倉庫和遠(yuǎn)程倉庫關(guān)聯(lián)

? ? ? ? git? ?add .? /? git add <file>添加到暫存區(qū)

? ? ? ? git? commit -m <message>? 提交到當(dāng)前分支

? ? ? ? ?git? status? ? ?查看工作目錄和暫存區(qū)的狀態(tài)

? ? ? ? git diff? ? ? 查看文件的更改

? ? ? ? git? ? branch 查看當(dāng)前分支

? ? ? ? git? ? branch? ? <name>? ? 創(chuàng)建分支

? ? ? ? git? ? checkout? ? <name>? ? 切換分支

? ? ? ? git checkout? ? -b? ? <name>? ? 創(chuàng)建并切換到當(dāng)前分支

? ? ? ? git? ? merge? ? <name>? ? 合并某分支到當(dāng)前分支

? ? ? ? git? ? branch? ? -d? ? <name>? ? 刪除本地分支

? ? ? ? git? ? branch? ? -a? ? 查看遠(yuǎn)程分支列表? 巢音,? ? 綠色代表當(dāng)前分支列表,紅色是遠(yuǎn)程分支列表

? ? ? ? git? ? branch? ? -m? ? <oldname> <newname> 重命名本地分支名

? ? ? ? git? ? log? ? 查看提交日志

? ? ? ? git? ? reflog? ? 查看命令歷史

? ? ? ? git? ? reset? ? --hard? ? commit_id? ? ?通過git? log 查看到每個版本的commit_id? 尽超,然后切換回退版本

? ? ? ? git? ? remote? ? -v? ? 查看遠(yuǎn)程庫信息

? ? ? ? git? ? reset? ? 清屏

? ? ? ? git? ? tag? ? <name> 創(chuàng)建新標(biāo)簽

? ? ? ? git? ? tag? ? 查看所有標(biāo)簽狀態(tài)

? ??????git? ?tag? ? -d? ? v1.0? ? 刪除v1.0標(biāo)簽

? ??????git push? origin? ?<tagname>? ? 推送某個標(biāo)簽到遠(yuǎn)程

? ??????git? push? origin? --tags? ? 推送全部未推送的標(biāo)簽到遠(yuǎn)程

? ??????git? tag? -d? v1.0? ?git push? origin? :refs/tags/v1.0 刪除已推送到遠(yuǎn)程倉庫的v1.0標(biāo)簽

? ? ? ? git放棄本地更改 強制拉取遠(yuǎn)程更新

? ??????git fetch –all?

????????git reset –hard origin/master

????????將本地分支提交到遠(yuǎn)程分支

????????$ git checkout -b feature-branch?

?????????//創(chuàng)建并切換到分支feature-branch?

?????????$ git push origin feature-branch:feature-branch

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官撼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子似谁,更是在濱河造成了極大的恐慌傲绣,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巩踏,死亡現(xiàn)場離奇詭異秃诵,居然都是意外死亡,警方通過查閱死者的電腦和手機塞琼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門菠净,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彪杉,你說我怎么就攤上這事毅往。” “怎么了派近?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵煞抬,是天一觀的道長。 經(jīng)常有香客問我构哺,道長革答,這世上最難降的妖魔是什么战坤? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮残拐,結(jié)果婚禮上途茫,老公的妹妹穿的比我還像新娘。我一直安慰自己溪食,他們只是感情好囊卜,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著错沃,像睡著了一般栅组。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枢析,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天玉掸,我揣著相機與錄音,去河邊找鬼醒叁。 笑死司浪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的把沼。 我是一名探鬼主播啊易,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饮睬!你這毒婦竟也來了租谈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤捆愁,失蹤者是張志新(化名)和其女友劉穎割去,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牙瓢,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡劫拗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矾克。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片页慷。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胁附,靈堂內(nèi)的尸體忽然破棺而出酒繁,到底是詐尸還是另有隱情,我是刑警寧澤控妻,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布州袒,位于F島的核電站,受9級特大地震影響弓候,放射性物質(zhì)發(fā)生泄漏郎哭。R本人自食惡果不足惜他匪,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夸研。 院中可真熱鬧邦蜜,春花似錦、人聲如沸亥至。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姐扮。三九已至絮供,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茶敏,已是汗流浹背壤靶。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睡榆,地道東北人萍肆。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓袍榆,卻偏偏與公主長得像胀屿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子包雀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

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