Git使用入門

選擇Git的原因

最近打算自己動(dòng)手寫點(diǎn)開(kāi)源項(xiàng)目,所以就需要有個(gè)代碼版本管理的工具衰伯,在公司上班使用的是SVN铡羡,SVN是集中式的版本控制,每個(gè)人代碼都要提交到服務(wù)器意鲸,離線時(shí)無(wú)法做代碼提交烦周,而Git是分布式的版本控制,可以建立本地分支临扮,而且更輕量級(jí)论矾,更貼近我的使用場(chǎng)景教翩,所以選擇了Git杆勇,關(guān)于SVN與Git的對(duì)比參見(jiàn)此文章

Git獲取

Git是一款免費(fèi)開(kāi)源的分布式版本控制軟件饱亿,支持Windows蚜退、Linux/Unix、Mac OS X操作系統(tǒng)彪笼,以GPL Lv2.0開(kāi)源協(xié)議發(fā)布钻注。最初由Linux之父林納斯·托瓦茲(Linus Torvalds)創(chuàng)作,為了更好的管理Linux內(nèi)核開(kāi)發(fā)而設(shè)計(jì)配猫。在Git官網(wǎng)可獲取到安裝包幅恋。

Git常用命令

創(chuàng)建新倉(cāng)庫(kù)
非裸倉(cāng)庫(kù)
  • 當(dāng)前目錄創(chuàng)建一個(gè)本地倉(cāng)庫(kù)(非裸倉(cāng)庫(kù))
git init

這個(gè)命令執(zhí)行后會(huì)在本地生成一個(gè) .git 的文件夾,用來(lái)追蹤倉(cāng)庫(kù)的所有變更泵肄。

  • 指定某個(gè)目錄成為本地倉(cāng)庫(kù)
git init <repo>

執(zhí)行上面命令后捆交, 將創(chuàng)建一個(gè)名為repo的本地倉(cāng)庫(kù)淑翼。

裸倉(cāng)庫(kù)

在指定目錄創(chuàng)建中心倉(cāng)庫(kù)(裸倉(cāng)庫(kù))

git init --bare <repo>

使用 --bare 參數(shù)初始化的倉(cāng)庫(kù),我們一般稱之為裸倉(cāng)庫(kù)品追, 因?yàn)檫@樣創(chuàng)建的倉(cāng)庫(kù)并不包含 工作區(qū) 玄括, 也就是說(shuō),我們并不能在這個(gè)目錄下執(zhí)行我們一般使用的 Git 命令肉瓦。

差異
  • 非裸倉(cāng)庫(kù)clone下來(lái)的倉(cāng)庫(kù)無(wú)法進(jìn)行push操作遭京,所以非裸倉(cāng)庫(kù)一般作為本地倉(cāng)庫(kù)使用,你可以將非裸倉(cāng)庫(kù)理解為一個(gè)單機(jī)的文件版本管理系統(tǒng)泞莉。
  • 裸倉(cāng)庫(kù)沒(méi)有工作區(qū)哪雕,只能作為中心倉(cāng)庫(kù)使用,因?yàn)闆](méi)有工作區(qū)所以不能直接在裸倉(cāng)庫(kù)上創(chuàng)建和提交文件戒财,需要clone下來(lái)热监,再操作∫可以理解為聯(lián)機(jī)管理系統(tǒng)的中心服務(wù)器孝扛。
    詳見(jiàn)文章【 Git 本地倉(cāng)庫(kù)和裸倉(cāng)庫(kù)

檢出倉(cāng)庫(kù)

執(zhí)行如下命令以創(chuàng)建一個(gè)本地倉(cāng)庫(kù)的克隆版本:

git clone /path/to/repository 

如果是遠(yuǎn)端服務(wù)器上的倉(cāng)庫(kù),你的命令會(huì)是這個(gè)樣子:

git clone username@host:/path/to/repository

你檢出的本地倉(cāng)庫(kù)由三部分組成:

  • 工作區(qū): 你持有的實(shí)際文件
  • 緩存區(qū): 臨時(shí)保存你的改動(dòng)
  • Head: 指向你最近一次提交后的結(jié)果


    本地倉(cāng)庫(kù)結(jié)構(gòu)示意圖

添加與提交

你可以計(jì)劃改動(dòng)(把它們添加到緩存區(qū))幽崩,使用如下命令:

git add <filename>
git add *

這是 git 基本工作流程的第一步苦始;使用如下命令以實(shí)際提交改動(dòng):

git commit -m "代碼提交信息"

現(xiàn)在,你的改動(dòng)已經(jīng)提交到了 HEAD慌申,但是還沒(méi)到你的遠(yuǎn)端倉(cāng)庫(kù)陌选。

推送改動(dòng)

你的改動(dòng)現(xiàn)在已經(jīng)在本地倉(cāng)庫(kù)的HEAD中了。執(zhí)行如下命令以將這些改動(dòng)提交到遠(yuǎn)端倉(cāng)庫(kù):

git push origin master

可以把 master 換成你想要推送的任何分支蹄溉。
如果你還沒(méi)有克隆現(xiàn)有倉(cāng)庫(kù)咨油,并欲將你的倉(cāng)庫(kù)連接到某個(gè)遠(yuǎn)程服務(wù)器,你可以使用如下命令添加:

git remote add origin <server>

如此你就能夠?qū)⒛愕母膭?dòng)推送到所添加的服務(wù)器上去了柒爵。

創(chuàng)建分支

分支是用來(lái)將特性開(kāi)發(fā)絕緣開(kāi)來(lái)的役电。在你創(chuàng)建倉(cāng)庫(kù)的時(shí)候,master是“默認(rèn)的”棉胀。在其他分支上進(jìn)行開(kāi)發(fā)法瑟,完成后再將它們合并到主分支上。

分支示意圖

創(chuàng)建一個(gè)叫做“feature_x”的分支唁奢,并切換過(guò)去:

git checkout -b feature_x

切換回主分支:

git checkout master

再把新建的分支刪掉:

git branch -d feature_x

除非你將分支推送到遠(yuǎn)端倉(cāng)庫(kù)霎挟,不然該分支就是 不為他人所見(jiàn)的:

git push origin <branch>

更新與合并

要更新你的本地倉(cāng)庫(kù)至最新改動(dòng),執(zhí)行:

git pull

以在你的工作目錄中 獲嚷榈А(fetch) 并 合并(merge) 遠(yuǎn)端的改動(dòng)酥夭。
要合并其他分支到你的當(dāng)前分支(例如 master),執(zhí)行:

git merge <branch>

兩種情況下,git 都會(huì)嘗試去自動(dòng)合并改動(dòng)熬北。不幸的是千所,自動(dòng)合并并非次次都能成功藏姐,并可能導(dǎo)致 沖突(conflicts)唧瘾。 這時(shí)候就需要你修改這些文件來(lái)人肉合并這些 沖突(conflicts) 了吗铐。改完之后涡拘,你需要執(zhí)行如下命令以將它們標(biāo)記為合并成功:

git add <filename>

在合并改動(dòng)之前踏拜,也可以使用如下命令查看:

git diff <source_branch> <target_branch>

標(biāo)簽

在軟件發(fā)布時(shí)創(chuàng)建標(biāo)簽悲酷,是被推薦的拗踢。這是個(gè)舊有概念会钝,在 SVN 中也有烈评』鸲恚可以執(zhí)行如下命令以創(chuàng)建一個(gè)叫做 1.0.0 的標(biāo)簽:

git tag 1.0.0 1b2e1d63ff

1b2e1d63ff 是你想要標(biāo)記的提交 ID 的前 10 位字符。使用如下命令獲取提交 ID:

git log

你也可以用該提交 ID 的少一些的前幾位讲冠,只要它是唯一的瓜客。

替換本地改動(dòng)

假如你做錯(cuò)事(自然,這是不可能的)竿开,你可以使用如下命令替換掉本地改動(dòng):

git checkout -- <filename>

此命令會(huì)使用 HEAD 中的最新內(nèi)容替換掉你的工作目錄中的文件谱仪。已添加到緩存區(qū)的改動(dòng),以及新文件否彩,都不受影響疯攒。

假如你想要丟棄你所有的本地改動(dòng)與提交列荔,可以到服務(wù)器上獲取最新的版本并將你本地主分支指向到它:

git fetch origin
git reset --hard origin/master

小貼士

內(nèi)建的圖形化 git:

gitk

彩色的 git 輸出:

git config color.ui true

顯示歷史記錄時(shí),只顯示一行注釋信息:

git config format.pretty oneline

交互地添加文件至緩存區(qū):

git add -i

參考【git - 簡(jiǎn)易指南

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笨奠,一起剝皮案震驚了整個(gè)濱河市朵逝,隨后出現(xiàn)的幾起案子啤咽,更是在濱河造成了極大的恐慌瓶佳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傻工,死亡現(xiàn)場(chǎng)離奇詭異坊饶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門散庶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蕉堰,“玉大人,你說(shuō)我怎么就攤上這事悲龟∥菅龋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵须教,是天一觀的道長(zhǎng)皿渗。 經(jīng)常有香客問(wèn)我斩芭,道長(zhǎng),這世上最難降的妖魔是什么乐疆? 我笑而不...
    開(kāi)封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任划乖,我火速辦了婚禮,結(jié)果婚禮上挤土,老公的妹妹穿的比我還像新娘琴庵。我一直安慰自己,他們只是感情好仰美,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布细卧。 她就那樣靜靜地躺著,像睡著了一般筒占。 火紅的嫁衣襯著肌膚如雪贪庙。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天翰苫,我揣著相機(jī)與錄音止邮,去河邊找鬼。 笑死奏窑,一個(gè)胖子當(dāng)著我的面吹牛导披,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埃唯,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撩匕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了墨叛?” 一聲冷哼從身側(cè)響起止毕,我...
    開(kāi)封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漠趁,沒(méi)想到半個(gè)月后扁凛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闯传,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年谨朝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甥绿。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡字币,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出共缕,到底是詐尸還是另有隱情洗出,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布骄呼,位于F島的核電站共苛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜓萄。R本人自食惡果不足惜隅茎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫉沽。 院中可真熱鬧辟犀,春花似錦、人聲如沸绸硕。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玻佩。三九已至出嘹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咬崔,已是汗流浹背税稼。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垮斯,地道東北人郎仆。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兜蠕,于是被迫代替她去往敵國(guó)和親扰肌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照熊杨,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)曙旭。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 15,875評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照晶府,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 3,913評(píng)論 0 11
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git夷狰,從https:/...
    落魂灬閱讀 12,661評(píng)論 4 54
  • 如何獲取最新的創(chuàng)業(yè)資訊,是一些創(chuàng)業(yè)者面臨的難題郊霎。如果每天在新聞門戶漫無(wú)目的地刷著科技類的新聞沼头,還不如到專業(yè)的科技媒...
    王子健閱讀 10,099評(píng)論 23 404
  • 如今的評(píng)論可能比內(nèi)容更加有趣进倍,內(nèi)容將決定下限,而評(píng)論將決定上限购对,更多的化學(xué)反應(yīng)將在評(píng)論區(qū)進(jìn)行發(fā)酵猾昆,那么針對(duì)于不同業(yè)...
    首席吹牛官閱讀 4,183評(píng)論 0 10