十分鐘學會git基礎

什么是Git忘苛?

Git 是 Linux 發(fā)明者 Linus 開發(fā)的一款新時代的版本控制系統(tǒng),那什么是版本控制系統(tǒng)呢缔莲?怎么理解哥纫?網(wǎng)上一大堆詳細的介紹,但是大多枯燥乏味痴奏,對于新手也很難理解蛀骇,這里我只舉幾個例子來幫助你們理解。

熟悉編程的知道读拆,我們在軟件開發(fā)中源代碼其實是最重要的擅憔,那么對源代碼的管理變得異常重要:

比如為了防止代碼的丟失,肯定本地機器與遠程服務器都要存放一份檐晕,而且還需要有一套機制讓本地可以跟遠程同步暑诸;

又比如我們經(jīng)常是好幾個人做同一個項目,都要對一份代碼做更改辟灰,這個時候需要大家互不影響个榕,又需要各自可以同步別人的代碼;

又比如我們開發(fā)的時候免不了有bug伞矩,有時候剛發(fā)布的功能就出現(xiàn)了嚴重的bug笛洛,這個時候需要緊急對代碼進行還原夏志;

又比如隨著我們版本迭代的功能越來越多乃坤,但是我們需要清楚的知道歷史每一個版本的代碼更改記錄,甚至知道每個人歷史提交代碼的情況沟蔑;

等等等類似以上的情況湿诊,這些都是版本控制系統(tǒng)能解決的問題。所以說瘦材,版本控制是一種記錄一個或若干文件內(nèi)容變化厅须,以便將來查閱特定版本修訂情況的系統(tǒng),對于軟件開發(fā)領域來說版本控制是最重要的一環(huán)食棕,而 Git 毫無疑問是當下最流行朗和、最好用的版本控制系統(tǒng)。

Git 安裝

上面說了簿晓,Git 是一個版本控制系統(tǒng)眶拉,你也可以理解成是一個工具,使用之前必須得先下載安裝憔儿,我用的是 Mac 忆植, Mac 上其實系統(tǒng)自帶 Git 的,不過這里統(tǒng)一提供一下各平臺的安裝方式,這部分就不過多介紹朝刊,相信大家這里搞的定耀里。

Mac:https://git-scm.com/download/mac
Windows:https://git-scm.com/download/win
Linux:apt-get install git

如何學習 Git ?

安裝好 Git 之后拾氓,怎么學習是個問題冯挎,其實關于 Git 有很多圖形化的軟件可以操作,但是我強烈建議大家從命令行開始學習理解咙鞍,我知道沒接觸過命令行的人可能會很抵觸织堂,但是我的親身實踐證明,只有一開始學習命令行奶陈,之后你對 Git 的每一步操作才能理解其意義易阳,而等你熟練之后你想用任何的圖形化的軟件去操作完全沒問題。

我一開始教我們團隊成員全是基于命令行的吃粒,事后證明他們現(xiàn)在已經(jīng)深深愛上命令行無法自拔潦俺,他們很理解 Git 每一步操作的具體含義,以致于在實際項目很少犯錯徐勃,所以我這里也是基于命令行去教你們學習理解事示。

Git 命令列表

怎么判斷你 Git 有沒有安裝成功?請在命令行里輸入 git 僻肖,如果出現(xiàn)以下提示證明你已經(jīng)安裝成功了肖爵。

 chensuilong@chensuingdeiMac  ~  git
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

Git 所有的操作命令開頭都要以 git 開頭,上面列舉了最常用的一些 Git 命令臀脏,緊接著會有一句英文解釋這個命令的意義劝堪,都不是很難的單詞,不妨試著看一下揉稚,不過沒有實際操作你仍然不好理解秒啦,下面我們來以一個實際的操作來介紹下一些常用命令的含義。

Git 具體命令

第一步搀玖,我們先新建一個文件夾余境,在文件夾里新建一個文件(我是用 Linux 命令去新建的,Windows用戶可以自己手動新建)

**mkdir test ** (創(chuàng)建文件夾test)
cd test (切換到test目錄)
touch a.md (新建a.md文件)

這里提醒下:在進行任何 Git 操作之前灌诅,都要先切換到 Git 倉庫目錄芳来,也就是先要先切換到項目的文件夾目錄下。

這個時候我們先隨便操作一個命令猜拾,比如 git status 即舌,可以看到如下提示:

chensuilong@chensuingdeiMac  ~/git/test  git status
fatal: Not a git repository (or any of the parent directories): .git

意思就是當前目錄還不是一個 Git 倉庫。

git init
這個時候用到了第一個命令关带,代表初始化 git 倉庫侥涵,輸入 git init 之后會提示:

chensuilong@chensuingdeiMac  ~/git/test  git init
Initialized empty Git repository in /Users/chensuilong/git/test/.git/

可以看到初始化成了沼撕,至此 test 目錄已經(jīng)是一個 git 倉庫了。

git status
緊接著我們輸入 git status 命令芜飘,會有如下提示:

chensuilong@chensuingdeiMac  ~/git/test   master  git status
On branch master

Initial commit

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

    a.md

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

默認就直接在 master 分支务豺,關于分支的概念后面會提,這時最主要的是提示 a.md 文件 Untracked files 嗦明,就是說 a.md 這個文件還沒有被跟蹤笼沥,還沒有提交在 git 倉庫里呢,而且提示你可以使用 git add <file> 去操作你想要提交的文件娶牌。

git status 這個命令顧名思義就是查看狀態(tài)奔浅,這個命令可以算是使用最頻繁的一個命令了,建議大家沒事就輸入下這個命令诗良,來查看你當前 git 倉庫的一些狀態(tài)汹桦。

git add
上面提示 a.md 文件還沒有提交到 git 倉庫里,這個時候我們可以隨便編輯下 a.md 文件鉴裹,然后輸入 git add a.md 舞骆,然后再輸入 git status :

chensuilong@chensuingdeiMac  ~/git/test   master  git add a.md
 chensuilong@chensuingdeiMac  ~/git/test   master ?  git status
On branch master

Initial commit

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

    new file:   a.md

此時提示以下文件 Changes to be committed , 意思就是 a.md 文件等待被提交径荔,當然你可以使用 git rm --cached 這個命令去移除這個緩存督禽。

git commit
接著我們輸入 git commit -m 'first commit' ,這個命令什么意思呢总处? commit 是提交的意思狈惫,-m 代表是提交信息,執(zhí)行了以上命令代表我們已經(jīng)正式進行了第一次提交鹦马。

這個時候再輸入 **git status **胧谈,會提示 nothing to commit。

git log
這個時候我們輸入 git log 命令菠红,會看到如下:

commit 57925cb3da8854e71cf8894bb3a23784b8571f1f
Author: chensuilong <xxxx@qq.com>
Date:   Sun Mar 5 21:57:42 2017 +0800

    hhh

git log 命令可以查看所有產(chǎn)生的 commit 記錄第岖,所以可以看到已經(jīng)產(chǎn)生了一條 commit 記錄,而提交時候的附帶信息叫 'first commit' 试溯。

git add & git commit
看到這里估計很多人會有疑問,我想要提交直接進行 commit 不就行了么郊酒,為什么先要再 add 一次呢遇绞?首先 git add 是先把改動添加到一個「暫存區(qū)」,你可以理解成是一個緩存區(qū)域燎窘,臨時保存你的改動摹闽,而 git commit 才是最后真正的提交。這樣做的好處就是防止誤提交褐健,當然也有辦法把這兩步合并成一步付鹿,不過后面再介紹澜汤,建議新手先按部就班的一步步來。

git branch
branch 即分支的意思舵匾,分支的概念很重要俊抵,尤其是團隊協(xié)作的時候,假設兩個人都在做同一個項目坐梯,這個時候分支就是保證兩人能協(xié)同合作的最大利器了徽诲。舉個例子,A, B倆人都在做同一個項目吵血,但是不同的模塊谎替,這個時候A新建了一個分支叫a, B新建了一個分支叫b蹋辅,這樣A钱贯、B做的所有代碼改動都各自在各自的分支,互不影響侦另,等到倆人都把各自的模塊都做完了喷舀,最后再統(tǒng)一把分支合并起來。

執(zhí)行 git init 初始化git倉庫之后會默認生成一個主分支 master 淋肾,也是你所在的默認分支硫麻,也基本是實際開發(fā)正式環(huán)境下的分支,一般情況下 master 分支不會輕易直接在上面操作的樊卓,你們可以輸入 git branch 查看下當前分支情況:

chensuilong@chensuingdeiMac  ~/git/test   master  git branch
* master

如果我們想在此基礎上新建一個分支呢拿愧,很簡單,執(zhí)行 git branch a 就新建了一個名字叫 a 的分支碌尔,這時候分支 a 跟分支 master 是一模一樣的內(nèi)容浇辜,我們再輸入 git branch 查看的當前分支情況:

chensuilong@chensuingdeiMac  ~/git/test   master  git branch a
 chensuilong@chensuingdeiMac  ~/git/test   master  git branch
  a
* master

但是可以看到 master 分支前有個** * **號,即雖然新建了一個 a 的分支唾戚,但是當前所在的分支還是在 master 上柳洋,如果我們想在 a 分支上進行開發(fā),首先要先切換到 a 分支上才行叹坦,所以下一步要切換分支

git checkout a

執(zhí)行這個命令熊镣,然后再輸入 git branch 查看下分支情況:

chensuilong@chensuingdeiMac  ~/git/test   master  git checkout a
Switched to branch 'a'
 chensuilong@chensuingdeiMac  ~/git/test   a  git branch
* a
  master

可以看到當前我們在的分支已經(jīng)是a了,這個時候 A 同學就可以盡情的在他新建的a分支去進行代碼改動了募书。

那有人就說了绪囱,我要先新建再切換,未免有點麻煩,有沒有一步到位的,聰明:

git checkout -b a

這個命令的意思就是新建一個a分支幢码,并且自動切換到a分支。

git merge
A同學在a分支代碼寫的不亦樂乎齿椅,終于他的功能完工了琉挖,并且測試也都ok了,準備要上線了涣脚,這個時候就需要把他的代碼合并到主分支master上來示辈,然后發(fā)布。git merge就是合并分支用到的命令涩澡,針對這個情況顽耳,需要先做兩步,第一步是切換到 master 分支妙同,如果你已經(jīng)在了就不用切換了射富,第二步執(zhí)行 git merge a ,意思就是把a分支的代碼合并過來粥帚,不出意外胰耗,這個時候a分支的代碼就順利合并到 master 分支來了。為什么說不出意外呢芒涡?因為這個時候可能會有沖突而合并失敗柴灯,留個包袱,這個到后面進階的時候再講费尽。

git branch -d
有新建分支赠群,那肯定有刪除分支,假如這個分支新建錯了旱幼,或者a分支的代碼已經(jīng)順利合并到 master 分支來了查描,那么a分支沒用了,需要刪除柏卤,這個時候執(zhí)行 **git branch -d a **就可以把a分支刪除了冬三。

git branch -D
有些時候可能會刪除失敗,比如如果a分支的代碼還沒有合并到master缘缚,你執(zhí)行 **git branch -d a **是刪除不了的勾笆,它會智能的提示你a分支還有未合并的代碼,但是如果你非要刪除桥滨,那就執(zhí)行 git branch -D a 就可以強制刪除a分支窝爪。

git tag
我們在客戶端開發(fā)的時候經(jīng)常有版本的概念,比如v1.0该园、v1.1之類的酸舍,不同的版本肯定對應不同的代碼,所以我一般要給我們的代碼加上標簽里初,這樣假設v1.1版本出了一個新bug,但是又不曉得v1.0是不是有這個bug忽舟,有了標簽就可以順利切換到v1.0的代碼双妨,重新打個包測試了淮阐。

所以如果想要新建一個標簽很簡單,比如 git tag v1.0 就代表我在當前代碼狀態(tài)下新建了一個v1.0的標簽刁品,輸入 git tag 可以查看歷史 tag 記錄泣特。

chensuilong@chensuingdeiMac  ~/git/test   a  git tag v1.0
 chensuilong@chensuingdeiMac  ~/git/test   a  git tag
v1.0
 chensuilong@chensuingdeiMac  ~/git/test   a  git tag v1.1
 chensuilong@chensuingdeiMac  ~/git/test   a  git tag
v1.0
v1.1

可以看到我新建了兩個標簽 v1.0、v1.1挑随。

想要切換到某個tag怎么辦状您?也很簡單,執(zhí)行 git checkout v1.0 兜挨,這樣就順利的切換到 v1.0 tag的代碼狀態(tài)了膏孟。

OK,以上全是一些最基本的Git操作拌汇,而且全是在本地環(huán)境進行操作的柒桑,完全沒有涉及到遠程倉庫,下一章節(jié)將以遠程 GitHub 倉庫為例噪舀,講解下本地如何跟遠程倉庫一起同步協(xié)作魁淳,另外今天講的全是最基礎最簡單的Git操作,一步步來与倡,后續(xù)再繼續(xù)講解一下Git的高階以及一些Git的酷炫操作界逛。

參考資料

git極速入門

Pro Git

建議學習了本視頻后,認真閱讀纺座,前三章息拜,更加深刻地理解git。

1. 起步

2. Git基礎

3. Git的分支

課后快速記憶

初始化本地倉庫
git init

添加文件到暫存區(qū)
git add [文件路徑或者目錄]

將暫存區(qū)文件提交到倉庫
git commit -m "[這里填寫提交的說明]"

創(chuàng)建分支
git branch 分支名稱

切換分支
git checkout 分支名稱

創(chuàng)建分支并切換到該分支比驻,帶有 -b 參數(shù)的 git checkout 命令
git checkout -b 分支名稱

分支合并
先切換到主分支该溯,然后合并我編寫好的分支

git checkout master

git merge 我編寫好的分支

創(chuàng)建標簽
git tag 標簽名

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市别惦,隨后出現(xiàn)的幾起案子狈茉,更是在濱河造成了極大的恐慌,老刑警劉巖掸掸,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氯庆,死亡現(xiàn)場離奇詭異,居然都是意外死亡扰付,警方通過查閱死者的電腦和手機堤撵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羽莺,“玉大人实昨,你說我怎么就攤上這事⊙喂蹋” “怎么了荒给?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵丈挟,是天一觀的道長。 經(jīng)常有香客問我志电,道長曙咽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任挑辆,我火速辦了婚禮例朱,結果婚禮上,老公的妹妹穿的比我還像新娘鱼蝉。我一直安慰自己洒嗤,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布蚀乔。 她就那樣靜靜地躺著烁竭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吉挣。 梳的紋絲不亂的頭發(fā)上派撕,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音睬魂,去河邊找鬼终吼。 笑死,一個胖子當著我的面吹牛氯哮,可吹牛的內(nèi)容都是我干的际跪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼喉钢,長吁一口氣:“原來是場噩夢啊……” “哼姆打!你這毒婦竟也來了?” 一聲冷哼從身側響起肠虽,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤幔戏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后税课,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闲延,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年韩玩,在試婚紗的時候發(fā)現(xiàn)自己被綠了垒玲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡找颓,死狀恐怖合愈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤想暗,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布妇汗,位于F島的核電站帘不,受9級特大地震影響说莫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寞焙,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一储狭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捣郊,春花似錦辽狈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娘扩,卻和暖如春着茸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琐旁。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工涮阔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灰殴。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓敬特,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牺陶。 傳聞我的和親對象是個殘疾皇子伟阔,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 轉(zhuǎn)載自躲起來的黑鳥 連最小的細節(jié)都會讓我產(chǎn)生共鳴的姑娘。孩子眼白帶點藍(我至今如此)掰伸。不過我是名字控皱炉,沒到會去考據(jù)...
    何青猊閱讀 340評論 0 0
  • 西西弗斯的故事二:宙斯 (譯者說:從審美的角度來講,我非常不喜歡這段原作者的語言體系碱工,啰嗦且邏輯不清娃承,但本著原滋原...
    捕風姐姐閱讀 529評論 0 0
  • 序?qū)僖亚餁w,署斂余威怕篷; 夜闌玉免晚涼催历筝,結伴銀鱗爭飲露,宿鳥驚飛廊谓。 河畔柳低垂梳猪,萬頃稻穗; 紅蓮謝罷碩蓬累,魚米之...
    簡小取閱讀 301評論 20 9
  • 他家小區(qū)里,二十二點三十三分匿沛。 我從家里面出來扫责,不是走出來,準確來說是逃出來逃呼。幾天的壓抑終于得到了些許的釋放鳖孤。 車...
    oops_6934閱讀 223評論 0 0
  • 遇見苏揣。不過是在人群中看了你那一眼,從起晴空萬里推姻,歲月不老平匈。靜靜地觀望,默默地想念藏古,暗自彷徨與你言笑增炭。只希望在一...
    Winky讀書閱讀 381評論 0 2