Git 入門

維基百科:git 是一個(gè)分散式版本控制軟體豁翎,由Linus Torvalds創(chuàng)作佃扼,于2005年以GPL推出
開發(fā)動(dòng)力來(lái)自對(duì)Linux核心采用來(lái)自BitKeeper的付費(fèi)版本控制軟件的不合缝驳,盡管BitKeeper母公司授權(quán)Linux社區(qū)免費(fèi)使用該軟件异袄。其他的開源集中式版本控制系統(tǒng)如CVS/SVN則被Linus所不喜(集中式夫偶,速度慢且必須聯(lián)網(wǎng)使用)亥曹,于是Linus用了10天時(shí)間用C編寫了分布式版本控制Git軟件,其特點(diǎn)是不需服務(wù)器端軟體毡泻,就可運(yùn)行版本控制且速度很快胜茧,其中最出色的功能是合并追蹤(merge tracing)。

簡(jiǎn)介

關(guān)于Git 的詳細(xì)介紹可參見廖雪峰老師的Git介紹仇味,有詳細(xì)的比喻呻顽。

簡(jiǎn)要來(lái)說(shuō)就是通過(guò)分布式版本控制,每個(gè)人電腦上都有一個(gè)完整的git版本庫(kù)丹墨,自動(dòng)記錄每次文件及目錄的改動(dòng)廊遍,并提供協(xié)作編輯的能力(通過(guò)服務(wù)器實(shí)現(xiàn)修改的交換),可追蹤多個(gè)版本的開發(fā)及維護(hù)工作贩挣,相比CVS/SVN等SCM(Software Configuration Managemen) 工具喉前,有著cheap local branching, convenient staging areas, multiple workflows等優(yōu)點(diǎn),且不管是小項(xiàng)目還是大項(xiàng)目王财,都有很快的速度和極高的效率卵迂。

安裝

從官網(wǎng)下載安裝最新版本,舊版本在Github上可以找到绒净。

使用

  1. git init
    在當(dāng)前目錄下創(chuàng)建版本庫(kù)(.git目錄下), git將用該目錄來(lái)跟蹤管理倉(cāng)庫(kù)(repository)见咒,該命令會(huì)創(chuàng)立唯一的master分支.
  2. git add sample.txt
    將文件sample添加到暫存區(qū)(stage或index),以便后續(xù)提交到分支中.
    每次修改后,必須用git add命令將修改添加到暫存區(qū)再提交.
    git commit -m "wrote a sample file"
    將文件提交到當(dāng)前分支進(jìn)行保存挂疆,-m后表示提交說(shuō)明.
    可多次add不同文件改览,最后提交一次,類似選中多個(gè)后提交.
  3. git status
    掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài), 想了解文本文件詳細(xì)的變化可用以下命令:
    git diff sample.txt
    列出文本文件所修改的地方缤言,確認(rèn)無(wú)誤后宝当,重新添加提交
    git add sample.txt
    git commit -m "modify some words"
    以上即是對(duì)文本修改后的重新提交至倉(cāng)庫(kù),生成新版本
  4. git log
    顯示從最近到最遠(yuǎn)的commit歷史胆萧,將輸出commit_id及提交說(shuō)明庆揩。其中commit_id是由SHA-1校驗(yàn)和作為版本id.
    命令末尾可添加--pretty=oneline,輸出簡(jiǎn)要的id及修改信息.
  5. git relog
    查看命令歷史鸳碧,可用于確定要回到未來(lái)的哪個(gè)版本.
  6. git reset --hard commit_id
    git通過(guò)HEAD指針指向commit的不同版本的Master分支, HEAD^可表示上個(gè)版本分支盾鳞,類似HEAD^^HEAD~**瞻离,回退到上上個(gè)版本或往上100個(gè)版本.
  7. git checkout -- file.txt
    撤銷對(duì)file的修改腾仅,回到上一次commit的狀態(tài),用版本庫(kù)里的替換工作區(qū)的套利。
    checkout -b xxx 表示切換到其他分支
    小結(jié):
    場(chǎng)景1:改亂了工作區(qū)某個(gè)文件的內(nèi)容推励,想直接丟棄工作區(qū)的修改時(shí)鹤耍,用命令git checkout -- file。

場(chǎng)景2:不但改亂了工作區(qū)某個(gè)文件的內(nèi)容验辞,還添加到了暫存區(qū)時(shí)稿黄,想丟棄修改,分兩步跌造,第一步用命令git reset HEAD <file>杆怕,就回到了場(chǎng)景1,第二步按場(chǎng)景1操作壳贪。

  1. git remote add origin git@server-name:path/repo-name.git
    將本地倉(cāng)庫(kù)關(guān)聯(lián)到一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
    git remote -v將用于查看遠(yuǎn)程分支的信息.
  2. git push -u origin master
    將本地master分支與遠(yuǎn)程的master分支連接陵珍,并將本地所有提交推送到遠(yuǎn)程
    以上兩步通常是遠(yuǎn)程庫(kù)為空,將本地庫(kù)推送到遠(yuǎn)程的步驟
  3. git clone git@github.com:repo-name.git
    從遠(yuǎn)程復(fù)制倉(cāng)庫(kù)到本地违施,clone僅僅將復(fù)制master分支互纯。若要對(duì)其他分支進(jìn)行操作,需要建立與遠(yuǎn)程分支一致的分支磕蒲,例如
    git checkout -b dev origin/dev留潦,后續(xù)pull,push進(jìn)行推送即
    git branch --set-upstream-to=origin/<branch> dev(鏈接本地與origin)
    git pull (注:若有沖突需要先解決沖突再commit后進(jìn)行push)
    git push origin/dev
    注:從Github上獲取clone的地址。
    地址有兩種辣往,一種是SSH兔院,一種HTTPS
    HTTPS除了速度慢,每次推送都必須輸入口令站削,在某些只開放HTTP端口的公司內(nèi)部就無(wú)法使用ssh協(xié)議而只能用https秆乳,而通過(guò)SSH支持的原生Git協(xié)議速度最快。
  4. git branch
    用于查看當(dāng)前的分支
    git branch name
    創(chuàng)建name分支
  5. git merge branchA
    將指定branchA分支合并到當(dāng)前所在分支
    合并有Fast-forward模式钻哩,即將當(dāng)前分支指針指向指向指定的提交,將不保留分支信息肛冶,即看不出進(jìn)行過(guò)合并.
    若通過(guò)--no-ff禁用Fast-forward模式街氢,Git將通過(guò)新建commit進(jìn)行提交以保留分支信息,即git merge --no-ff -m "merge with no-off" A
  6. git branch -d branchA
    刪除branchA
    git branch -D <name>
    將強(qiáng)制刪除睦袖,適用于刪除一個(gè)沒有被合并過(guò)的分支
  7. git log --graph
    顯示分支合并圖
    小結(jié):
    通常實(shí)際中珊肃,master分支十分穩(wěn)定,通過(guò)派生出的dev分支進(jìn)行開發(fā)工作馅笙,每個(gè)人在自己的dev分支上進(jìn)行開發(fā)新功能伦乔,再將新功能合并到dev分支上,大版本更新時(shí)將dev分支合并到master分支董习,在master分支上發(fā)布新的大版本.
  8. git stash
    將當(dāng)前工作狀態(tài)保存后留待后續(xù)使用烈和,提供干凈的環(huán)境,以便處理新的緊急情況
  9. git stash list
    列出保存的工作狀態(tài)
  10. git stash pop or git stash apply git stash drop
    恢復(fù)有兩種方式皿淋,pop將恢復(fù)并刪除stash招刹,apply恢復(fù)但不刪除而通過(guò)drop進(jìn)行刪除
  11. git rebase
    將本地未push的分支提交歷史整理為直線恬试,使我們查看歷史提交更容易,缺點(diǎn)是本地的分叉提交被修改過(guò)疯暑。
  12. git tag v1.0
    給當(dāng)前分支取標(biāo)簽训柴,便于記憶及使用,默認(rèn)是在當(dāng)前分支最新提交上commit上打標(biāo)簽妇拯,即有該commit的分支均可看到該標(biāo)簽
    git tag v0.9 commit_id
    對(duì)某個(gè)commit打標(biāo)簽
    git show tag_name
    顯示標(biāo)簽信息
    git tag
    顯示所有的標(biāo)簽
    git tag -d tag_name
    從本地刪除某個(gè)標(biāo)簽幻馁,然后從遠(yuǎn)程刪除git push origin :refs/tags/tag_name
    git push origin tag_name
    推送某個(gè)標(biāo)簽到遠(yuǎn)程, push origin --tags將推送所有未推送過(guò)的標(biāo)簽
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市越锈,隨后出現(xiàn)的幾起案子仗嗦,更是在濱河造成了極大的恐慌,老刑警劉巖瞪浸,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儒将,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡对蒲,警方通過(guò)查閱死者的電腦和手機(jī)钩蚊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蹈矮,“玉大人砰逻,你說(shuō)我怎么就攤上這事》耗瘢” “怎么了蝠咆?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)北滥。 經(jīng)常有香客問我刚操,道長(zhǎng),這世上最難降的妖魔是什么再芋? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任菊霜,我火速辦了婚禮,結(jié)果婚禮上济赎,老公的妹妹穿的比我還像新娘鉴逞。我一直安慰自己,他們只是感情好司训,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布构捡。 她就那樣靜靜地躺著,像睡著了一般壳猜。 火紅的嫁衣襯著肌膚如雪勾徽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天蓖谢,我揣著相機(jī)與錄音捂蕴,去河邊找鬼譬涡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啥辨,可吹牛的內(nèi)容都是我干的涡匀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溉知,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陨瘩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起级乍,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舌劳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后玫荣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甚淡,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捅厂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贯卦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焙贷,死狀恐怖撵割,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辙芍,我是刑警寧澤啡彬,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站故硅,受9級(jí)特大地震影響庶灿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吃衅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一跳仿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捐晶,春花似錦、人聲如沸妄辩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)眼耀。三九已至英支,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哮伟,已是汗流浹背干花。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工妄帘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人池凄。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓抡驼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肿仑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子致盟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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