Git 命令行詳解

Git 簡介

Git是什么,借用繆雪峰先生的一句話羡蛾,Git是目前世界上最先進的分布式版本控制系統(tǒng)(沒有之一)蒋情。

我們熟悉的svn是集中式的版本控制系統(tǒng),那與git所屬的分布式版本控制系統(tǒng)究竟有什么不同呢筷凤。

  • 集中式必須聯(lián)網(wǎng)昭殉,依靠“中央服務器”,即自己先從“中央服務器”獲取最新代碼藐守,工作完成之后挪丢,再提交到“中央服務器”。分布式不需要聯(lián)網(wǎng)卢厂,也不需要“中央服務器”乾蓬。它的理念是每一臺電腦都是一個完整的版本庫。聯(lián)網(wǎng)慎恒,只是多人協(xié)作時“交流”更方便一點任内。

  • 從安全性上來說,分布式版本控制系統(tǒng)更安全一點融柬。由于其每一臺電腦都保存有完整的版本死嗦,即使有一臺損壞,直接從另一臺copy一份出來即可粒氧。但若是集中式的“中央服務器”掛掉了越除,那整個系統(tǒng)也就over了。

下面是集中式版本控制系統(tǒng)分布式版本控制系統(tǒng)的圖示外盯。

集中式版本控制系統(tǒng)

分布式版本控制系統(tǒng)

Attention:現(xiàn)在git有一些圖形化界面軟件廊敌,例如sourceTree,做的都十分友好,開源免費门怪。

很多人認為有了SourceTree這樣友好的軟件骡澈,我們完全可以不用去學什么繁雜的命令行,難記掷空。對此我不能茍同肋殴。命令行是根。軟件也只是對這些命令行的封裝坦弟。在掌握Git用法之后护锤,去看看其背后所對應的命令,是非常有必要的酿傍。

下面就開始一起來看看都有哪些命令分別針對哪些場景烙懦。

git tag 相關(guān)

查看本地所有的標簽列表

$ git tag

切換到某個tag下代碼

$ git checkout < tagName >

創(chuàng)建一個新的標簽

$ git tag < tagName > 
eg: git tag release_1.1.2  創(chuàng)建一個release分支1.1.2版本的標簽

可以創(chuàng)建一個帶有說明的標簽

$ git tag -a < tagName > -m  "description"
eg : git tag -a release_1.1.2 -m "release version 1.1.2 submit to appStore"

查看上述信息 可以用 git show < tagName >

$ git show < tagName >
eg : git show release_1.1.2

這些只是在你的本地創(chuàng)建了標簽,并未推送到遠程赤炒。如果想推送到遠程氯析,普通的git push等是不具有這樣的功能的亏较。你需要執(zhí)行

$ git push origin < tagName >
eg : git push origin release_1.1.2

刪除本地標簽

$ git tag -d < tagName >

刪除遠程標簽。(先刪除本地標簽掩缓,然后執(zhí)行下面)

$ git push origin :refs/tags/< tagName >
eg: git push origin :refs/tags/release_1.1.2

如果別人上傳了一個標簽雪情,你需要查看這個標簽的源碼

$ git fetch origin tag < tagName >

git clone 相關(guān)


場景設(shè)定:你現(xiàn)在在github或者OSChina上已經(jīng)有了一個倉庫,地址為:https://github.com/oscarwuer/YHRepository.git你辣,有兩個分支巡通,masterdevelop,默認的是master分支舍哄。


現(xiàn)在先將項目拷貝到本地宴凉,cd 到相應目錄,執(zhí)行

$ git clone <url>
 eg: git clone https://github.com/oscarwuer/YHRepository.git

上面的命令克隆下來的是默認的分支表悬。如果你想直接克隆develop分支弥锄,用下面的命令

$ git clone -b <branchName> <url>
  eg:    git clone -b develop 

如果是想克隆某個tag的項目,是如下的命令

$ git clone <tagName> <url>
  eg: git clone 20151108 https://github.com/oscarwuer/YHRepository.git

git branch 相關(guān)

列舉本地所有的分支

$ git branch

列舉遠程所有的分支

$ git branch -r

列舉本地和遠程的所有分支

$ git branch -a

切換本地分支

$ git checkout <branchName>

新建本地分支(注意不能與當前已有分支重名)

$ git branch -b <branchName>

切換到一個新的分支

$ git checkout -b <branchName>

刪除當前一個分支

$ git branch -d <branchName>

強制刪除當前一個分支(當你的工作區(qū)有修改時签孔,這時候你又不想要整個分支了叉讥,普通刪除是無法執(zhí)行的)

$ git branch -D <branchName>

指定本地分支與遠程分支的鏈接

$ git branch --set-upstream <localBranch> origin/<remoteBranch>

eg: git branch --set-upstream develop origin/develop

git push 相關(guān)

將本地分支推到遠程

$ git push origin <localBranchName>:<remoteBranchName>

簡約來寫(會自動對應本地分支與遠程分支)

$ git push

刪除遠程分支(即省略本地分支名,將一個空的提交到遠程分支即刪除)(這個一定注意饥追,為了防止誤操作图仓,一般公司會禁用刪除操作)

$ git push origin :<remoteBranchName>

常用的應用場景

$ git status    查看當前工作區(qū)的狀態(tài)    
$ git add . 或者 $ git add -A 將所有的改動添加到暫存區(qū)
$ git commit -m "提交內(nèi)容簡介" 
$ git pull    推送之前先拉取最新的
$ git push 推送到遠程分支上

以上是一次常規(guī)的git操作。

如果開發(fā)完畢但绕,發(fā)現(xiàn)有bug救崔。一般是如下操作:

$ git checkout -b issue_12 切換到新建bug分支issue_12上。

fix bug operation...
completion...

$ git add .
$ git commit -m "fix bug 12"
$ git checkout master 重新切換到主干分支
$ git merge --no-ff -m "merge with fix issue_12" issue_12 將bug分支合并到主分支
$ git push 記得要推送到遠程分支上捏顺。
$ git branch -d issue-12 刪除剛剛新建的分支六孵。

如果你發(fā)現(xiàn)了bug,恰巧你在develop分支上已經(jīng)在開發(fā)新的需求幅骄,進行到一半劫窒。即工作區(qū)有內(nèi)容。這時候你是無法切換分支的拆座。如何來應對這樣的場景呢主巍。

$ git stash 將工作現(xiàn)場的內(nèi)容暫存起來

Attention:
1\. $ git stash list 可以查看你暫存起來的工作現(xiàn)場的內(nèi)容
2\. $ git status 常用此命令查看當前工作區(qū)是否干凈。只有干凈時才能切換分支挪凑,否則會丟失你修改的內(nèi)容孕索。

$ git checkout -b issue-22

fix bug operation...
completion...

$ git add .
$ git commit -m "fix bug 22"
$ git checkout develop
$ git merge --no-ff -m "merge with fix bug 22" issue-22
$ git push
$ git branch -d issue-22

完成上述之后,bug修復了躏碳,那接下來要恢復我們之前工作的內(nèi)容搞旭。
$ git stash pop 恢復之前工作現(xiàn)場的內(nèi)容

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肄渗,更是在濱河造成了極大的恐慌镇眷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恳啥,死亡現(xiàn)場離奇詭異偏灿,居然都是意外死亡丹诀,警方通過查閱死者的電腦和手機钝的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铆遭,“玉大人硝桩,你說我怎么就攤上這事∶度伲” “怎么了碗脊?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橄妆。 經(jīng)常有香客問我衙伶,道長,這世上最難降的妖魔是什么害碾? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任矢劲,我火速辦了婚禮,結(jié)果婚禮上慌随,老公的妹妹穿的比我還像新娘芬沉。我一直安慰自己,他們只是感情好阁猜,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布丸逸。 她就那樣靜靜地躺著,像睡著了一般剃袍。 火紅的嫁衣襯著肌膚如雪黄刚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天民效,我揣著相機與錄音憔维,去河邊找鬼。 笑死研铆,一個胖子當著我的面吹牛埋同,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棵红,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凶赁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虱肄,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤致板,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咏窿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斟或,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年集嵌,在試婚紗的時候發(fā)現(xiàn)自己被綠了萝挤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡根欧,死狀恐怖怜珍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凤粗,我是刑警寧澤酥泛,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嫌拣,受9級特大地震影響柔袁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜异逐,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一捶索、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧应役,春花似錦情组、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袍祖,卻和暖如春底瓣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕉陋。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工捐凭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凳鬓。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓茁肠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缩举。 傳聞我的和親對象是個殘疾皇子垦梆,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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