Git使用基礎(chǔ)-1

我見青山多嫵媚孔轴,料青山,見我碎捺,應(yīng)如是路鹰。程序員應(yīng)如是

image

git簡介

很多人都知道,Linus在1991年創(chuàng)建了開源的Linux收厨,從此晋柱,Linux系統(tǒng)不斷發(fā)展,已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了诵叁。

Linus雖然創(chuàng)建了Linux雁竞,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux編寫代碼拧额,那Linux的代碼是如何管理的呢碑诉?

事實是,在2002年以前势腮,世界各地的志愿者把源代碼文件通過diff的方式發(fā)給Linus联贩,然后由Linus本人通過手工方式合并代碼!

你也許會想捎拯,為什么Linus不把Linux代碼放到版本控制系統(tǒng)里呢泪幌?不是有CVS盲厌、SVN這些免費的版本控制系統(tǒng)嗎?因為Linus堅定地反對CVS和SVN祸泪,這些集中式的版本控制系統(tǒng)不但速度慢吗浩,而且必須聯(lián)網(wǎng)才能使用。有一些商用的版本控制系統(tǒng)没隘,雖然比CVS懂扼、SVN好用,但那是付費的右蒲,和Linux的開源精神不符阀湿。

不過,到了2002年瑰妄,Linux系統(tǒng)已經(jīng)發(fā)展了十年了陷嘴,代碼庫之大讓Linus很難繼續(xù)通過手工方式管理了,社區(qū)的弟兄們也對這種方式表達了強烈不滿间坐,于是Linus選擇了一個商業(yè)的版本控制系統(tǒng)BitKeeper灾挨,BitKeeper的東家BitMover公司出于人道主義精神,授權(quán)Linux社區(qū)免費使用這個版本控制系統(tǒng)竹宋。

安定團結(jié)的大好局面在2005年就被打破了劳澄,原因是Linux社區(qū)牛人聚集,不免沾染了一些梁山好漢的江湖習氣蜈七。開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議(這么干的其實也不只他一個)秒拔,被BitMover公司發(fā)現(xiàn)了(監(jiān)控工作做得不錯!)飒硅,于是BitMover公司怒了溯警,要收回Linux社區(qū)的免費使用權(quán)。

Linus可以向BitMover公司道個歉狡相,保證以后嚴格管教弟兄們,嗯食磕,這是不可能的尽棕。實際情況是這樣的:

Linus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng),這就是Git彬伦!一個月之內(nèi)滔悉,Linux系統(tǒng)的源碼已經(jīng)由Git管理了!牛是怎么定義的呢单绑?大家可以體會一下回官。

Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年搂橙,GitHub網(wǎng)站上線了歉提,它為開源項目免費提供Git存儲,無數(shù)開源項目開始遷移至GitHub,包括jQuery苔巨,PHP版扩,Ruby等等。

歷史就是這么偶然侄泽,如果不是當年BitMover公司威脅Linux社區(qū)礁芦,可能現(xiàn)在我們就沒有免費而超級好用的Git了。

git安裝

  • Windows

    去官網(wǎng)下載悼尾,選擇安裝路徑柿扣,默認安裝即可 Git官網(wǎng)下載

  • Lunix

    • 通常輸入git可以查看如否安裝,如果沒有安裝闺魏,會提示你安裝的命令
    • 如果是Ubuntu或Debain可以通過sudo apt-get install git即可安裝
    • 如果是其他版本的Linux未状,可以采用去官網(wǎng)下載源碼,然后解壓舷胜,依次輸入:./config娩践,makesudo make install這幾個命令安裝就好了
  • Mac

    在Appstore中下載Xcode這個IDE,這是蘋果系統(tǒng)最好的IDE烹骨,開發(fā)人員一定會下載的那種翻伺,Xcode中集成了Git,不過沒有默認安裝沮焕,需要運行Xcode吨岭,在Preferences中找到Downloads,選擇Command Line Tools,點擊install即可

基本應(yīng)用

創(chuàng)建版本庫

什么是版本庫呢峦树?版本庫又名倉庫辣辫,英文名repository,你可以簡單理解成一個目錄魁巩,這個目錄里面的所有文件都可以被Git管理起來急灭,每個文件的修改、刪除谷遂,Git都能跟蹤葬馋,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”肾扰。

  • 選擇一個合適的地方畴嘶,創(chuàng)建一個空目錄

    mkdir GitHubRepository
    cd GitHubRepository
    pwd  #顯示當前目錄
    
    image-20201104191830658

    注:為了避免莫名其妙的問題,建議目錄(包括父目錄)使用英文

  • 通過git init命令把此目錄變成Git管理的倉庫

    git init
    
    image-20201104191855689

    瞬間Git就把倉庫建好了集晚,而且告訴你是一個空的倉庫(empty Git repository)窗悯,細心的讀者可以發(fā)現(xiàn)當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的偷拔,沒事千萬不要手動修改這個目錄里面的文件蒋院,不然改亂了亏钩,就把Git倉庫給破壞了。

  • 把文件添加到版本庫

    首先這里再明確一下悦污,所有的版本控制系統(tǒng)铸屉,其實只能跟蹤文本文件的改動,比如TXT文件切端,網(wǎng)頁彻坛,所有的程序代碼等等,Git也不例外踏枣。版本控制系統(tǒng)可以告訴你每次的改動昌屉,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”茵瀑。而圖片间驮、視頻這些二進制文件,雖然也能由版本控制系統(tǒng)管理马昨,但沒法跟蹤文件的變化竞帽,只能把二進制文件每次改動串起來,也就是只知道圖片從100KB改成了120KB鸿捧,但到底改了啥屹篓,版本控制系統(tǒng)不知道,也沒法知道匙奴。

    不幸的是堆巧,Microsoft的Word格式是二進制格式,因此泼菌,版本控制系統(tǒng)是沒法跟蹤Word文件的改動的谍肤,前面我們舉的例子只是為了演示,如果要真正使用版本控制系統(tǒng)哗伯,就要以純文本方式編寫文件荒揣。

    因為文本是有編碼的,比如中文有常用的GBK編碼焊刹,日文有Shift_JIS編碼乳附,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼伴澄,所有語言使用同一種編碼,既沒有沖突阱缓,又被所有平臺所支持非凌。

    • 編寫一個about.txt文件,內(nèi)容如下
    我是程序員應(yīng)如是
    Git is a version control system
    
    • 使用git add命令荆针,把文件添加到倉庫
    git add about.txt
    
    image-20201104191919909

    注:LF和CRLF是兩種換行方式敞嗡,對于這次學習Git沒影響

    • 使用git commit命令颁糟,把文件提交到倉庫
    git commit -m "This is a message about me"
    # -m 后面的是本次提交的說明信息,最好寫的有意義喉悴,幫助別人了解此次改動的信息
    
    image-20201104191940296
    • 使用git status查看結(jié)果
    git status
    
    image-20201104191958853

    注:git add <file>可以添加多個文件棱貌,反復(fù)使用;git commit -m <message>可以一次提交多個文件

時光穿梭(版本)

  • 現(xiàn)在模仿日常工作箕肃,要對項目進行修改婚脱,我們修改about.txt文件,添加如下信息

    Git is a free software.
    

    再使用git status查看結(jié)果

    image-20201104192017163

    通過git status命令勺像,我們可以時刻掌握倉庫當前的狀態(tài)障贸,上面的命令輸出告訴我們,文件被修改了吟宦,但是還沒有提交修改

    • 使用git diff命令查看具體修改的內(nèi)容
    git diff about.txt
    
    image-20201104192035542
    • 再分別使用git add;git commit;git status命令查看狀態(tài)
    git add about.txt
    git status
    #查看此時的狀態(tài)
    git commit -m "Add a message"
    git status
    #再查看此時的狀態(tài)
    
    image-20201104192057057
  • 版本回退

    • 使用git log命令查看文件的版本
    git log
    
    image-20201104192114962

    git log命令顯示從最近到最遠的提交日志

    如果嫌輸出信息太多篮洁,可以加上--pretty=oneline參數(shù)

    git log --pretty=oneline
    
    image-20201104192132332

    需要友情提示的是,你看到的一大串類似4b4258ee...的是commit id(版本號)殃姓,和SVN不一樣袁波,Git的commit id不是1,2蜗侈,3……遞增的數(shù)字篷牌,而是一個SHA1計算出來的一個非常大的數(shù)字,用十六進制表示宛篇,而且你看到的commit id和我的肯定不一樣娃磺,以你自己的為準。為什么commit id需要用這么一大串數(shù)字表示呢叫倍?因為Git是分布式的版本控制系統(tǒng)偷卧,后面我們還要研究多人在同一個版本庫里工作,如果大家都用1吆倦,2听诸,3……作為版本號,那肯定就沖突了蚕泽。

    • 版本回退

    在Git中晌梨,用HEAD表示當前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣)须妻,上一個版本就是HEAD^仔蝌,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數(shù)不過來荒吏,所以寫成HEAD~100敛惊。

    #回到上一個版本
    git reset --hard HEAD^
    
    image-20201104192151062

    我們已經(jīng)乘坐時光機回去了

    • 想再回來

    如果想要再回來,就必須知道commit id绰更,如果不記得了瞧挤,git提供了后悔藥

    git refolg # 記錄你的每一次命令
    git reset --hard 4b4258e
    cat about.txt
    
    image-20201104192206215

    誒嘿锡宋,我胡漢三又回來了

    注:版本號沒必要寫全,前幾位就可以了特恬,Git會自動去找执俩。當然也不能只寫前一兩位,因為Git可能會找到多個版本號癌刽,就無法確定是哪一個了役首。

  • 工作區(qū)和暫存區(qū)

    Git和其他版本控制系統(tǒng)如SVN的一個不同之處就是有暫存區(qū)的概念。

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

    就是你在電腦里能看到的目錄妒穴,比如我的LearnMysql文件夾就是一個工作區(qū)

    • 版本庫(Repository)

    工作區(qū)有一個隱藏目錄.git宋税,這個不算工作區(qū),而是Git的版本庫讼油。

    Git的版本庫里存了很多東西杰赛,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master矮台,以及指向master的一個指針叫HEAD乏屯。

    image-20201104192223012
    • 工作流程

    第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區(qū)瘦赫;

    第二步是用git commit提交更改辰晕,實際上就是把暫存區(qū)的所有內(nèi)容提交到當前分支。

  • 管理修改

    Git管理的是修改确虱,當你用git add命令后含友,在工作區(qū)的第一次修改被放入暫存區(qū),準備提交校辩,但是窘问,在工作區(qū)的第二次修改并沒有放入暫存區(qū),所以宜咒,git commit只負責把暫存區(qū)的修改提交了惠赫,也就是第一次的修改被提交了,第二次的修改不會被提交故黑。

    • 可以用git diff HEAD命令查看工作區(qū)和版本庫里面最新版本的區(qū)別
    git diff HEAD --about.txt
    
    image-20201104192239252
  • 撤銷修改

    當你在深夜加班修改項目時儿咱,不小心在項目里添加了如下

    TMD,stupid boss
    

    ,難受场晶!這個月的獎金混埠,嗯~

    • 內(nèi)容只在工作區(qū),沒有使用過git add
    git checkout -- about.txt
    

    git checkout -- file可以丟棄工作區(qū)的修改

    image-20201104192255744
    image-20201104192309329

    修改被刪除了

    注:git checkout -- file命令中的--很重要诗轻,沒有--钳宪,就變成了“切換到另一個分支”的命令,我們在后面的分支管理中會再次遇到git checkout命令。

    • 內(nèi)容在暫存區(qū)使套,使用了git add命令,沒使用git commit命令
    git reset HEAD about.txt
    #把文件從暫存區(qū)重新放回工作區(qū)
    

    現(xiàn)在修改在工作區(qū)鞠柄,可以使用上面的命令將工作區(qū)的修改刪除

    image-20201104192339336

    嗯侦高,獎金總算保住了

    • 如果腦子一熱,使用了git commit命令厌杜,可以通過版本回退奉呛,回到上一個版本
    image-20201104192358404
  • 刪除文件

    現(xiàn)在我們有一個沒用的文件test.txt,想要刪除,文件已經(jīng)在版本庫中

    首先我們先刪除工作區(qū)的文件夯尽,可以圖形化刪除也可以使用命令rm <file>

    image-20201104192415808

    現(xiàn)在我們有兩個選擇

    • 刪除版本庫中的文件
    git rm test.txt #從版本庫中刪除文件
    git commit -m "remove test.txt"
    
    #也可以使用git add test.txt 代替git rm test.txt 效果一樣
    
    image-20201104192430077
    • 刪除了瞧壮,從版本庫中恢復(fù)文件
    #git checkout 版本庫里文件的版本替換工作區(qū)里文件的版本
    git checkout -- test.txt
    
    image-20201104192448870

小提示:

  • git 提交信息

    查看其他人提交的修改內(nèi)容或自己的歷史記錄的時候,提交信息是需要用到的重要資料匙握。所以請用心填寫修改內(nèi)容的提交信息咆槽,以方便別人理解。
    以下是Git的標準注解:

    第1行:提交修改內(nèi)容的摘要
    第2行:空行
    第3行以后:修改的理由
    
  • git更新

    #查看版本
    git --version
    #git版本是2.17.1之前
    git update
    #git版本是2.17.1之后
    git update-git-for-windows
    

                                                 END
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末圈纺,一起剝皮案震驚了整個濱河市秦忿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛾娶,老刑警劉巖灯谣,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛔琅,居然都是意外死亡胎许,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門罗售,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辜窑,“玉大人,你說我怎么就攤上這事莽囤∶粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵朽缎,是天一觀的道長惨远。 經(jīng)常有香客問我,道長话肖,這世上最難降的妖魔是什么北秽? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮最筒,結(jié)果婚禮上贺氓,老公的妹妹穿的比我還像新娘。我一直安慰自己床蜘,他們只是感情好辙培,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布蔑水。 她就那樣靜靜地躺著,像睡著了一般扬蕊。 火紅的嫁衣襯著肌膚如雪搀别。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天尾抑,我揣著相機與錄音歇父,去河邊找鬼。 笑死再愈,一個胖子當著我的面吹牛榜苫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翎冲,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼垂睬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了府适?” 一聲冷哼從身側(cè)響起羔飞,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎檐春,沒想到半個月后逻淌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡疟暖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年卡儒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俐巴。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡骨望,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欣舵,到底是詐尸還是另有隱情擎鸠,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布缘圈,位于F島的核電站劣光,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糟把。R本人自食惡果不足惜绢涡,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遣疯。 院中可真熱鬧雄可,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虐急,卻和暖如春过椎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戏仓。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亡鼠,地道東北人赏殃。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像间涵,于是被迫代替她去往敵國和親仁热。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355