科研工具 | 分布式版本控制:Git學(xué)習(xí)筆記

寫在前面

Git作為目前世界上最先進的分布式版本控制系統(tǒng)阳仔,可以算是程序員必備技能了近范。

一直都知道學(xué)會它的重要性评矩,但就是沒有花時間好好學(xué)習(xí)一下斥杜。這兩天借跑實驗數(shù)據(jù)的時間蔗喂,打算好好學(xué)習(xí)一下,認真靜下心來畦粮,沒有什么問題是真的學(xué)不會的吧宣赔。

發(fā)現(xiàn)自己最近心理素質(zhì)真是蹭蹭蹭的開始往上漲了哈哈哈~~~

(一) Git 基本入門

1. 安裝Git

  1. 在linux下安裝Git很簡單儒将,只需要輸入以下語句就可以了:sudo apt-get install git
  2. 初始配置: 作為分布式版本控制系統(tǒng)椅棺,每個機器都必須自報家門两疚,Git需要知道我們的用戶名和email诱渤,需在在命令行進行如下配置勺美。
    git config --global user.name "YourName"
    git config --global user.email "email@example.com"
    

2. 創(chuàng)建版本庫

  1. 進入到自己想創(chuàng)建版本庫的目錄
  2. 輸入指令: git init

    如圖所示缎脾,會在目錄中創(chuàng)建.git的目錄遗菠,這個目錄就是Git用來跟蹤管理版本庫的辙纬。

3. 文件添加進版本庫

  1. git add filename 將文件名為filename的文件添加進倉庫贺拣,可以多個文件名并列譬涡,用空格隔開昂儒。
  2. git add --all 命令將當(dāng)前所有文件添加進倉庫渊跋;
  3. 注: 這里git add只是相當(dāng)于選中的功能拾酝,還沒有放進去蒿囤。
  4. git commit -m "describe it" 命令執(zhí)行將文件提交到倉庫的操作材诽,這個時候才放進去了。
  5. 要使用Git進行管理的文件一定要在當(dāng)前目錄下建邓,即與.git文件夾處于同級官边,否則Git找不到它注簿。

4. 查看倉庫狀態(tài): git status

  • git status 可以隨時倉庫當(dāng)前狀態(tài)诡渴,查看已經(jīng)命令過但還未經(jīng)提交到倉庫的所有操作玩徊,可以看成是待處理事項列表。
  • 原來的我們加入的文件1.txt是空的胶哲,什么內(nèi)容都沒有潭辈,現(xiàn)在嘗試輸入一點內(nèi)容把敢。

如圖所示婶恼,git可以檢測到我們對文件做了改動勾邦,但還沒有準(zhǔn)備提交的命令下達眷篇。

5. 查看更改內(nèi)容:git diff

  • git status命令我們只知道做了修改蕉饼,但是還不知道具體修改的內(nèi)容
  • git diff這個命令就幫助我們解決這個問題。

    現(xiàn)在就可以知道我在文檔里加入的是什么內(nèi)容了厦幅。

6. 更新文件

文件如果修改過确憨,提交修改和提交新文件是一樣的休弃。

git add 1.txt
git commit -m "modify 1.txt"

7. 查看操作記錄:git log

  • git log 會打印我們對倉庫所作的操作記錄
  • git log --pretty oneline 單行打印歷史操作記錄
  • 輸出的一大串?dāng)?shù)字屬于 commit id

8. 查看歷史命令: git reflog

  • 記錄了每一次命令
  • 可以在版本回退時用來恢復(fù)到未來的狀態(tài)查找版本號

(二) Git 版本管理入門

1. 版本回退: git reset

  • 每一次commit都是對應(yīng)一個版本
  • commit id是對版本的具體標(biāo)識
  • HEAD表示當(dāng)前版本
  • HEAD^表示上一個版本
  • HEAD^^表示上上版本
  • HEAD~100表示前100個版本
  • git reset --hard commitId 回退到版本號為commitId的地方,也可以用HEAD的形式表示稽坤。
  • 穿梭前尿褪,用git log查看提交歷史杖玲,以便確定要回退到哪個版本摆马。
  • 重返未來囤采,用git reflog查看命令歷史蕉毯,以便確定要回到未來的哪個版本恕刘。

2. 工作區(qū)和暫存區(qū)

  • 先上一張很經(jīng)典的圖


  • 工作區(qū):就是我們在電腦中實際看到的坷澡;
  • 版本庫:工作區(qū)中的隱藏目錄.git频敛,就是版本庫;
  • 暫存區(qū):暫存區(qū)的概念很重要着降,理解暫存區(qū)之后對于Git的版本管理會有一個比較清晰的思路任洞。
  • master: 這是Git為我們自動創(chuàng)建的第一個分支交掏。
  • 我覺得如果把工作區(qū)看成是鍵盤終端輸入盅弛,版本庫中的master可以看成是電腦硬盤挪鹏,我們輸入的內(nèi)容首先是到緩存中的讨盒,并不是直接存入硬盤催植。當(dāng)緩存區(qū)滿或者人為發(fā)送指令時才會將緩存區(qū)的內(nèi)容寫入硬盤勺择。
  • 以添加和文件修改為例省核,git add指令只是選中文件或者其他要提交的修改气忠,將它們添加進暫存區(qū)旧噪。只有使用git commit指令的時候淘钟,才將暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支米母。

3. 撤銷修改

  • 工作區(qū)文件內(nèi)容被修改铁瞒,但還沒有添加到暫存區(qū):那么直接丟棄工作區(qū)的修改慧耍,回到跟版本庫一樣的狀態(tài)芍碧。
    git checkout -- file
  • 工作區(qū)文件內(nèi)容被修改师枣,并且已經(jīng)添加進暫存區(qū)践美,但還沒有commit:如果這時候直接用上面那條語句陨倡,那么工作區(qū)的文件會恢復(fù)到跟上一次提交到暫存區(qū)的一樣兴革。所以要先將暫存區(qū)的修改撤除,這樣就跟上面的情況一樣庶艾,然后再丟棄工作區(qū)的修改咱揍。
    git reset HEAD file
    git checkout -- file
    
  • 工作區(qū)文件內(nèi)容被修改煤裙,且已經(jīng)提交: 用版本回退git reset的方法進行恢復(fù)硼砰。

4. 刪除文件

  • 前提:一個文件已經(jīng)提交到版本庫后手動刪除或者rm file指令刪除
  • git status可以看到文件被刪除题翰。
  • 確定刪除:那就需要從版本庫中也刪除文件:
    git rm file
    git commit -m "remove file"
    
  • 恢復(fù)文件:刪錯了遍愿,因為版本庫里還有呢沼填,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:
    git checkout -- test.txt
    
    git checkout其實是用版本庫里的版本替換工作區(qū)的版本坞笙,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”籍茧。
    (持續(xù)更新中~~~~)

(三) Git 遠程倉庫

之前學(xué)習(xí)的都是本地倉庫的管理寞冯,但是如果有一個遠程倉庫既可以用來存放又可以在本地倉庫跟遠程倉庫之間進行同步就太好了吮龄。

Github就屬于遠程倉庫漓帚。之前一直覺得Github很難學(xué)尝抖,現(xiàn)在對Git有了一定的了解之后迅皇,至少覺得它不是那么遙不可及的了登颓。

1. Github和Bitbucket的簡單介紹

這兩個都是用的比較多的遠程倉庫管理平臺挺据,在學(xué)習(xí)了一些資料之后做一點歸納性的總結(jié)工作:

  • 兩者都可以為你的代碼托管提供幫助扁耐;
  • 兩者都可以使用Git進行管理婉称;
  • Github更關(guān)注開源王暗,你需要為私有項目付費;
  • Bitbucket提供無限的免費私人倉庫科汗,還支持五人團隊開發(fā)头滔;
  • 相對來說坤检,GitHub上面的項目資源或更多一些早歇,功能也會強大很多箭跳;

總的來說衅码,建議同時使用GitHub和BItbucket逝段,私人或者暫不適合公開的項目就選擇用Bitbucket管理奶躯,公開項目就放到Github上面嘹黔。

2. 添加遠程倉庫并關(guān)聯(lián)

  1. 在Github或者BItbucket中創(chuàng)建好一個倉庫repository后儡蔓,可以把本地已經(jīng)有的倉庫與之關(guān)聯(lián)疼邀。然后把本地的內(nèi)容推動到遠程倉庫。
  2. 關(guān)聯(lián)遠程庫获询,使用命令:
    git remote add origin git@server-name:path/repo-name.git
  3. 關(guān)聯(lián)后,使用該命令執(zhí)行第一次推送master分支的所有內(nèi)容:
    git push -u origin master
  4. 以后每次本地倉庫提交之后梢薪,想要將修改同步到遠程倉庫,都可以使用以下命令:
    git push origin master

3. 從遠程倉庫克隆

上面我們講的是現(xiàn)有本地倉庫畜疾,然后創(chuàng)建遠程倉庫來同步它的情況印衔。最好的方式是一開始就先創(chuàng)建好遠程庫瞎暑,然后從遠程庫克隆到本地与帆。

  1. 最簡單的方式是直接點擊遠程倉庫上的‘clone`進行克隆勿她。
  2. 代碼方式:生成遠程倉庫后都會有一個倉庫地址逢并,使用git clone命令進行克隆即可郭卫。常見形式為:
    git clone git@server-name:path/repo-name.git

(四) 分支管理

1. 分支需求描述

  • 不完整的改動可以先放到分支上玻蝌,這樣別人看不到分支的內(nèi)容俯树,不會相互影響聘萨。可以直到開發(fā)完畢后,再一次性合并到原來的分支上.

  • 一開始的時候翘贮,master分支是一條線,Git用master指向最新的提交扯再,再用HEAD指向master,就能確定當(dāng)前分支斋竞,以及當(dāng)前分支的提交點:

只有一條master時間線

2. 創(chuàng)建、合并和刪除分支

2.1 原理

  • 創(chuàng)建新的分支:當(dāng)我們創(chuàng)建新的分支鳄袍,例如dev時拗小,Git新建了一個指針叫dev哀九,指向master相同的提交,再把HEAD指向dev唇礁,就表示當(dāng)前分支在dev上:
    創(chuàng)建新的分支dev
  • Git創(chuàng)建一個分支很快勾栗,增加一個dev指針,改改HEAD的指向. 從現(xiàn)在開始盏筐,對工作區(qū)的修改和提交就是針對dev分支了围俘,比如新提交一次后,dev指針往前移動一步琢融,而master指針不變:


    對工作區(qū)的修改和提交
  • 合并分支:把dev合并到master上, 最簡單的方法就是直接把master指向dev的當(dāng)前提交界牡,就完成了合并:
    合并分支
  • 刪除分支:刪除dev分支就是把dev指針給刪掉,刪掉后就剩下了一條master分支:
    刪除分支

2.2 實戰(zhàn)

  • take dev as an example
  • 創(chuàng)建分支: git branch dev
  • 切換到分支:git checkout dev
  • 創(chuàng)建+切換分支: git checkout -b dev
  • 查看當(dāng)前分支:git branch
  • 切換到master分支:git checkout master
  • 合并指定分支到當(dāng)前分支:git merge dev
  • 刪除分支:git branch -d dev
  • git log --graph命令可以看到分支合并圖宿亡。

3. 分支策略

在實際開發(fā)中,我們應(yīng)該按照幾個基本原則進行分支管理:

  1. master分支應(yīng)該是非常穩(wěn)定的漠另,也就是僅用來發(fā)布新版本,平時不能在上面干活;
  2. 干活都在dev分支上,也就是說,dev分支是不穩(wěn)定的,到某個時候,比如1.0版本發(fā)布時柴底,再把dev分支合并到master上鸿脓,在master分支發(fā)布1.0版本幻件;
  3. 你和你的小伙伴們每個人都在dev分支上干活贺待,每個人都有自己的分支,時不時地往dev分支上合并就可以了绍撞。
    4.所以非洲,團隊合作的分支看起來就像這樣:


    團隊合作分支

4. Bug分支

  • 修復(fù)bug時梦染,我們會通過創(chuàng)建新的bug分支進行修復(fù)遂铡,然后合并珠增,最后刪除;
  • 當(dāng)工作沒有完成時,先把工作現(xiàn)場git stash一下桃焕,然后去修復(fù)bug.
  • 修復(fù)后师痕,再git stash pop笔横,回到工作現(xiàn)場汽烦。
  • 要丟棄一個沒有被合并過的分支迄薄,可以通過git branch -D <name>強行刪除讥蔽。

5. 多人協(xié)作

5.1 基本命令

  • 當(dāng)從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應(yīng)起來了侯繁,并且,遠程倉庫的默認名稱是origin弓颈。
  • 要查看遠程庫的信息款票,用git remote
  • 顯示更詳細的信息, 用git remote -v
  • 推送分支: 就是把該分支上的所有本地提交推送到遠程庫。推送時锁施,要指定本地分支,這樣篱竭,Git就會把該分支推送到遠程庫對應(yīng)的遠程分支上:
    git push origin master  
    git push origin dev
    
  • 并不是一定要把本地分支往遠程推送,master分支是主分支氯质,因此要時刻與遠程同步, 其他視情況而定.
  • git pull 抓取遠程的新提交.
  • 在本地創(chuàng)建和遠程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name隧期,本地和遠程分支的名稱最好一致;
  • 建立本地分支和遠程分支的關(guān)聯(lián)之碗,使用git branch --set-upstream branch-name origin/branch-name

5.2 工作模式總結(jié)

  1. 首先派诬,用git push origin branch-name推送自己的修改;

  2. 如果推送失敗吊趾,則因為遠程分支比你的本地更新,需要先用git pull試圖合并识颊;

  3. 如果合并有沖突奠伪,則解決沖突藐俺,并在本地提交浙宜;

  4. 沒有沖突或者解決掉沖突后扶镀,再用git push origin branch-name推送就能成功!

  5. 如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關(guān)系沒有創(chuàng)建智亮,用命令git branch --set-upstream branch-name origin/branch-name

最后

真的是超級感謝廖雪峰老師提供的Git教程了,大贊(≧▽≦)/

文章很多圖和文章都從這里摘錄瓦呼,教程講的真的蠻容易理解學(xué)習(xí)的稚字,推薦給同樣想學(xué)的人哦(????ω????)

參考文獻

Git教程
怎么樣使用github
GitHub vs. Bitbucket 不只是功能不同

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窄驹,一起剝皮案震驚了整個濱河市负拟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歹河,老刑警劉巖掩浙,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秸歧,居然都是意外死亡厨姚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門键菱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谬墙,“玉大人,你說我怎么就攤上這事经备∈锰В” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵侵蒙,是天一觀的道長造虎。 經(jīng)常有香客問我,道長纷闺,這世上最難降的妖魔是什么算凿? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任份蝴,我火速辦了婚禮,結(jié)果婚禮上澎媒,老公的妹妹穿的比我還像新娘搞乏。我一直安慰自己,他們只是感情好戒努,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布请敦。 她就那樣靜靜地躺著,像睡著了一般储玫。 火紅的嫁衣襯著肌膚如雪侍筛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天撒穷,我揣著相機與錄音匣椰,去河邊找鬼。 笑死端礼,一個胖子當(dāng)著我的面吹牛禽笑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛤奥,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佳镜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凡桥?” 一聲冷哼從身側(cè)響起蟀伸,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缅刽,沒想到半個月后啊掏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡衰猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年迟蜜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啡省。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娜睛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冕杠,到底是詐尸還是另有隱情,我是刑警寧澤酸茴,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布分预,位于F島的核電站,受9級特大地震影響薪捍,放射性物質(zhì)發(fā)生泄漏笼痹。R本人自食惡果不足惜配喳,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凳干。 院中可真熱鬧晴裹,春花似錦、人聲如沸救赐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽经磅。三九已至泌绣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間预厌,已是汗流浹背阿迈。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轧叽,地道東北人苗沧。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像炭晒,于是被迫代替她去往敵國和親待逞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,656評論 9 163
  • GIT分布式版本控制系統(tǒng)最佳實踐 這篇文章來自于老男孩教育高級架構(gòu)師班12期的徐亮偉同學(xué)腰埂。 首先感謝老男孩架構(gòu)師班...
    meng_philip123閱讀 3,408評論 4 36
  • API地址: http://59kuang.com/api2.php?mod=weather 特點:支持http飒焦、...
    狂人技術(shù)閱讀 2,173評論 4 0
  • 小學(xué)寫作文牺荠,經(jīng)典事例不出兩個:一是下大雨的夜晚,媽媽背著發(fā)高燒的我去醫(yī)院驴一,不經(jīng)意間發(fā)現(xiàn)媽媽那一頭烏黑長發(fā)中夾雜著幾...
    何又又閱讀 641評論 2 7
  • 我的閑言碎語休雌。 人總是在長時間的生活工作中產(chǎn)生懈怠的情緒,對于工作沒有了熱情肝断,對于生活也不在有激情杈曲,對于伴侶也變得...
    夜雨one閱讀 153評論 0 0