GIT之入門小白篇

什么是Git

Git是一個開源的分布式版本控制系統(tǒng),可以有效絮重、高速地處理從很小到非常大的項目版本管理。

Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)

好不好用,看看它的開發(fā)者是誰就知道了:Linux之父 Linus Torvalds

小歷史: Linux內(nèi)核社區(qū)原本使用的是名為BitKeeper的商業(yè)化版本控制工具桥嗤,2005年,因為社區(qū)內(nèi)有人試圖破解BitKeeper的協(xié)議仔蝌,BitMover公司收回了免費(fèi)使用BitKeeper的權(quán)力泛领。

Linus原本可以出面道個歉,繼續(xù)使用BitKeeper敛惊,然而并沒有渊鞋。。瞧挤。Linus大神僅用了兩周時間锡宋,自已用C寫了一個分布式版本控制系統(tǒng),于是Git誕生了特恬!

image

為什么要使用Git.

1执俩、適合分布式開發(fā),強(qiáng)調(diào)個體癌刽。

2役首、公共服務(wù)器壓力和數(shù)據(jù)量都不會太大。

3显拜、速度快衡奥、靈活。

4远荠、任意兩個開發(fā)者之間可以很容易的解決沖突杰赛。

5、離線工作矮台。

基本的 Git 工作流程如下:

在工作目錄中修改某些文件乏屯。

對修改后的文件進(jìn)行快照根时,然后保存到暫存區(qū)域。

提交更新辰晕,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲到 Git 目錄中蛤迎。

所以,我們可以從文件所處的位置來判斷狀態(tài):如果是Git目錄中保存著的特定版本文件含友,就屬于已提交狀態(tài)替裆;如果作了修改并已放入暫存區(qū)域,就屬于已暫存狀態(tài)窘问;如果自上次取出后辆童,作了修改但還沒有放到暫存區(qū)域,就是已修改狀態(tài)惠赫。

創(chuàng)建版本庫

有兩種取得Git項目倉庫的方法把鉴。第一種是在現(xiàn)存的目錄下,通過導(dǎo)入所有文件來創(chuàng)建新的Git倉庫儿咱。 第二種是從已有的Git倉庫克隆出一個新的鏡像倉庫來庭砍。

在目錄中創(chuàng)建新倉庫

如果一個目錄還沒有使用Git進(jìn)行管理,只需到此項目所在的目錄混埠,執(zhí)行git init怠缸,初始化后,在當(dāng)前目錄下會出現(xiàn)一個名為.git的目錄


 $ mkdir learngit

 $ cd learngit

 $ git init

從已有的倉庫克隆

如果Git項目已經(jīng)存在钳宪,可以使用git clone從遠(yuǎn)程服務(wù)器上復(fù)制一份出來

版本庫基本操作

檢查當(dāng)前文件狀態(tài)

使用git status命令可以查看文件的狀態(tài)

  $ git status
  On branch masterInitial commit 
  nothing to commit (create/copy filesanduse"git add"to track)

出現(xiàn)如上的提示揭北,說明現(xiàn)在的工作目錄相當(dāng)干凈,所有已跟蹤文件在上次提交后都未被更改過吏颖。

現(xiàn)在我們做一些改動搔体,添加一個readme.txt進(jìn)去,然后再看一下狀態(tài)

$ cat readme.txt
 hello git
^C

git status
On branch master

Initial commit

Untracked files:
(use "git add <file>..." to include in what will be committed)
readme.txt

nothing added to commit but untracked files present (use "git add" to track)

Untracked files顯示了這個新創(chuàng)建的readme.txt處于未跟跟蹤狀態(tài)

使用git add命令開始跟蹤一個新文件

$ git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file:   readme.txt

readme.txt已被跟蹤侦高,并處于暫存狀態(tài)

將本次修改暫存

現(xiàn)在我們再對readme.txt進(jìn)行修改,添加一行厌杜,再執(zhí)行g(shù)it status查看狀態(tài)

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   readme.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   readme.txt
image

可以看到readme.txt 不僅出現(xiàn)在了Changes to be committed奉呛,還出現(xiàn)在了Changes not staged for commit

由此可見,Git關(guān)心的是Changes夯尽,而不是文件本身瞧壮。

再次執(zhí)行git add,可以將本次修改提交到暫存區(qū)匙握,Changes not staged for commit提示消失

image

提交更新

使用git commit命令將暫存區(qū)中的內(nèi)容提交至版本庫咆槽,工作區(qū)又是干凈的了

$ git commit -m "my first commit"
[master (root-commit) 6c8912a] my first commit
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working tree clean

注意:一定要使用-m參數(shù)加入注釋,認(rèn)真描述本次的提交具體做了些什么圈纺,這對于以后我們查詢歷史記錄非常重要秦忿。

如果覺得使用暫存區(qū)過于繁瑣麦射,可以在commit時直接使用-a參數(shù),Git就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交灯谣,從而跳過git add步驟潜秋。

$ git commit -a -m"my first commit"

撤消操作

撤消操作在這里這里不做重點描述了,只列出幾個常用命令胎许。

修改最后一次提交:

git commit --amend

取消已經(jīng)暫存的文件:

git reset HEAD readme.txt

取消對文件的修改:

git checkout -- readme.txt

那我們?nèi)绾问褂肎IT呢峻呛,下面介紹一款git使用工具來給大家簡化操作。

先簡單介紹下sourceTree的使用

1.下載安裝包

官網(wǎng)提供下載地址sourcetree官網(wǎng)地址

2.安裝

在安裝過程中需要注冊賬戶辜窑,可以注冊atlassian賬號進(jìn)行登錄钩述,或在網(wǎng)上找教程跳過登錄步驟;點擊進(jìn)入免注冊地址

3.使用

依次打開 工具-選項

image
image
image
image
image

首先先明白一個東西穆碎,那就是暫存的操作是將工作區(qū)的文件add到暫存區(qū)牙勘,最后commit到遠(yuǎn)程倉庫。
add類比購物車

commit類比支付

想想如果沒有add 那不是每買一件物品就要付一次款惨远?

有了購物車我可以一次買好多東西谜悟,還可以把不想買的扔掉反正還沒付款,付款時錢也一次性付完北秽。

還有就是某個功能開發(fā)葡幸,add相當(dāng)于是一次文件的快照版,如果你想回滾可以直接找到你暫存的快照版本贺氓,而不是一直commit到服務(wù)器上面蔚叨。

儲藏區(qū)的概念。將沒有commit的東西扔進(jìn)去辙培,下次可以pop出來(stash pop)蔑水。比如你還沒有修改完所有你想要修改的東西,但是此時需要做別的修改(比如pull代碼合并沖突)扬蕊,沒有commit是不會允許你merge的搀别,此時就用到stash了。

下面是一些git的基本操作指令:

   mkdir:         XX (創(chuàng)建一個空目錄XX指目錄名)

   pwd:          顯示當(dāng)前目錄的路徑尾抑。

   git init          把當(dāng)前的目錄變成可以管理的git倉庫歇父,生成隱藏.git文件。

   touch           xx文件或者新建文件

   git add XX       把xx文件添加到暫存區(qū)去再愈。

   git commit –m “XX”  提交文件 –m后面的是注釋榜苫。

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

   git diff  XX     查看XX文件修改了那些內(nèi)容

   git log          查看歷史記錄

   git reset  --hard HEAD^

   cat XX         查看XX文件內(nèi)容

   gitreflog       查看歷史記錄的版本號id

   git checkout -- XX  把XX文件在工作區(qū)的修改全部撤銷。

   gitrm XX          刪除XX文件

   git remote add  originhttps://github.com/sgl/testgit 關(guān)聯(lián)一個遠(yuǎn)程庫

   git push –u(第一次要用-u 以后不需要) origin master 把當(dāng)前master分支推送到遠(yuǎn)程庫

   git clonehttps://github.com/sgl/testgit  從遠(yuǎn)程庫中克隆

   git checkout –b dev  創(chuàng)建dev分支 并切換到dev分支上

   git branch  查看當(dāng)前所有的分支

   git checkout master 切換回master分支

   git merge dev    在當(dāng)前的分支上合并dev分支

   git branch –d dev 刪除dev分支

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

   git remote 查看遠(yuǎn)程庫的信息

   git remote –v 查看遠(yuǎn)程庫的詳細(xì)信息

   git push originmaster  Git會把master分支推送到遠(yuǎn)程庫對應(yīng)的遠(yuǎn)程分支上 

Git倉庫中的分支:

Release(發(fā)布) 分支

當(dāng)項目開始時翎冲,第一件事情就是創(chuàng)建發(fā)布分支垂睬。發(fā)布分支是基于 master 分支創(chuàng)建而來。

所有與本項目相關(guān)的代碼都在發(fā)布分支中,這個分支也是一個以release/開頭的普通分支驹饺。

比如這次的發(fā)布分支名為release/fb钳枕。

可能有多個項目都基于同一份代碼運(yùn)行,因此對于每一個項目來說都需要創(chuàng)建一個獨立的發(fā)布分支逻淌。假設(shè)現(xiàn)在還有一個項目正在并行運(yùn)行么伯,那就得為這個項目創(chuàng)建一個單獨的發(fā)布分支比如release/messenger

需要單獨的發(fā)布分支的原因是:多個并行項目是基于同一份代碼運(yùn)行的卡儒,但是項目之間不能有沖突田柔。

Bugfix(bug修復(fù)分支)

bugfix\somehotfix,BUG修復(fù)分支骨望,所有由測試提的BUG都在這類分支上修復(fù)硬爆,可以是每一個BUG對應(yīng)一個分支,

也可以一系列BUG對應(yīng)一個分支擎鸠,根據(jù)實際情況調(diào)整缀磕,bugfix分支的來源都是release分支

Feature(功能分支) branch

對于應(yīng)用中的每一個功能都應(yīng)該創(chuàng)建一個獨立的功能分支,這會確保這些功能能被單獨構(gòu)建劣光。

功能分支也和其他分支一樣袜蚕,只是以feature/開頭。

確認(rèn)要實現(xiàn)的功能绢涡,從develop分支創(chuàng)建功能開發(fā)分支牲剃,分支名可以直接使用要實現(xiàn)功能的簡短描述,比如feature/考試題目加密功能

開發(fā)人員需要確保將發(fā)布分支的最新代碼合并到功能分支雄可,并且解決所有的沖突凿傅。

一個發(fā)布周期的流程如圖所示:

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市数苫,隨后出現(xiàn)的幾起案子聪舒,更是在濱河造成了極大的恐慌,老刑警劉巖虐急,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箱残,死亡現(xiàn)場離奇詭異,居然都是意外死亡止吁,警方通過查閱死者的電腦和手機(jī)被辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赏殃,“玉大人敷待,你說我怎么就攤上這事间涵∪嗜龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抗蠢。 經(jīng)常有香客問我举哟,道長,這世上最難降的妖魔是什么迅矛? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任妨猩,我火速辦了婚禮,結(jié)果婚禮上秽褒,老公的妹妹穿的比我還像新娘壶硅。我一直安慰自己,他們只是感情好销斟,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布庐椒。 她就那樣靜靜地躺著,像睡著了一般蚂踊。 火紅的嫁衣襯著肌膚如雪约谈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天犁钟,我揣著相機(jī)與錄音棱诱,去河邊找鬼。 笑死涝动,一個胖子當(dāng)著我的面吹牛迈勋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捧存,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼粪躬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昔穴?” 一聲冷哼從身側(cè)響起镰官,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吗货,沒想到半個月后泳唠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡宙搬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年笨腥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勇垛。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡脖母,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闲孤,到底是詐尸還是另有隱情谆级,我是刑警寧澤钝凶,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布鹏溯,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏猾警。R本人自食惡果不足惜摩窃,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一星立、第九天 我趴在偏房一處隱蔽的房頂上張望秸歧。 院中可真熱鬧,春花似錦吕朵、人聲如沸猎醇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姑食。三九已至,卻和暖如春茅坛,著一層夾襖步出監(jiān)牢的瞬間音半,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工贡蓖, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留曹鸠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓斥铺,卻偏偏與公主長得像彻桃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晾蜘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345