Git從0到1

本文只是幫助你入門渠旁,從一個不會使用git的小白,到會解決開發(fā)中常見的使用船逮。
廢話不多說顾腊,直接進入正題。

最遠處

git

git是用于Linux內(nèi)核開發(fā)的版本控制工具挖胃。與CVS杂靶、Subversion一類的集中式版本控制工具不同,它采用了分布式版本庫的作法酱鸭,不需要服務(wù)器端軟件吗垮,就可以運作版本控制,使得源代碼的發(fā)布和交流極其方便凹髓。git的速度很快烁登,這對于諸如Linux內(nèi)核這樣的大項目來說自然很重要。git最為出色的是它的合并追蹤(merge tracing)能力

安裝

安裝蔚舀,其實很簡單饵沧,和普通軟件安裝無異。這里不介紹了赌躺。

創(chuàng)建新倉庫

創(chuàng)建一個目錄狼牺,打開,然后執(zhí)行

git init

創(chuàng)建一個新的git倉庫.
初始化git的方法有很多種

  • 在本地創(chuàng)建
  • 在gitlab或github上創(chuàng)建寿谴,git clone下來锁右,
  • 圖形界面上創(chuàng)建
遠程
克隆倉庫

執(zhí)行如下命令可以創(chuàng)建一個本地克隆版本:

git clone /path/to/repository

如果實在遠端服務(wù)器上的倉庫,你的命令會是這樣子:

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

克隆倉庫也有很多內(nèi)容,比如修改倉庫名之類的等等咏瑟。

工作流

你的本地倉庫由git維護的三棵組成拂到。第一棵樹是你的工作目錄,它持有實際文件码泞;第二個是暫存區(qū)(index),它像是緩存區(qū)兄旬,臨時保存你的改動;最后是HEAD余寥,它指向你最后一次提交的結(jié)果领铐。

git工作原理

添加和提交

你可以提交更改(吧它們添加到暫存區(qū)),使用如下命令:

git add <filename>
git add *
git add .

這是git基本工作流程第一步宋舷;使用如下命令以時間提交改動:

git commit -m '代碼提交的信息'

現(xiàn)在绪撵,你的改動已經(jīng)提交到HEAD,但是沒有提交到你的遠端倉庫祝蝠。

推送改動

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

git push origin master

可以把master換成你想要推送的任何分支。
如果你沒有克隆現(xiàn)有的倉庫绎狭,并欲將的倉庫連接到某個遠程服務(wù)器细溅,你可以使用如下命令添加:

git remote add origin <server>

如此,你就可以將你的改動推送到所添加的服務(wù)器上去了儡嘶。

分支

分支是用來將特性開發(fā)絕緣開來的喇聊,在你創(chuàng)建倉庫的時候,master是"默認的"分支蹦狂。在其他分支進行開發(fā)誓篱,完成后再將他們合并到主分支上。
創(chuàng)建一個叫"feature_test"的分支,并切換過去:

git checkout -b feature_test
# or
git branch feature_test
git checkout feature_test

切換回主分支

git checkout master

刪除分支

git branch -d feature_test

除非你將分支推送到遠程倉庫鸥咖,不然該分支就是其他人不可見的:

git push origin <branch>

更新與合并

要更新你本地倉庫至最新改動燕鸽,執(zhí)行:

git pull origin <branch>

以在你工作目錄中獲取(fetch)合并(meger)遠端的改動。
要合并其他分支到你當前分支(如master),執(zhí)行:

git merge <branch>

在這兩種情況下,git都會嘗試去自動合并并改動啼辣。遺憾的是,這可能并非每次都成功御滩,并可能出現(xiàn)(conficts).這個時候就需要你修改這些文件手動合并這些沖突(conflicts).改完后鸥拧,你需要執(zhí)行如下命令將他們標記為合并成功:

git add <filename>

在合并改動之前,你可以使用如下命令預覽差異:

git diff <source_branch> <target_branch>

標簽

為軟件發(fā)布創(chuàng)建標簽是推薦的削解。這個概念早已存在富弦,svn中也有。你可以執(zhí)行如下命令創(chuàng)建一個叫做1.0.0的標簽:

git tag 1.0.0 abcdef1234

abcef1234是你想要標記的提交的ID的前10位字符氛驮,可以使用下列命令獲取提交ID:

git log

你也可以使用少一點的提交ID前幾位腕柜,只要它的指向具有唯一性。提交ID可以回滾。

log

如果想要了解蹦迪倉庫的歷史記錄盏缤,最簡單的命令:

git log

還可以添加一些參數(shù)來修改它的輸出砰蠢,得到自己想要的結(jié)果宪摧。只看某個人提交的記錄:

git log --auth=youdi

一個壓縮后每一條提交記錄只占位一行

git log --pretty=oneline

或者你想要通過ASCII藝術(shù)的樹形結(jié)構(gòu)來顯示所有的分支询枚,每個分支都標示了它的名字和標簽:

git log --graph --oneline --decorate --all

看看哪些文件改變了:

git log --name-status

這些只是你可以使用的參數(shù)一部分,更多可以查看:

git log --help

替換本地改動

假如你操作失誤(當然第岖,這最好永遠不要發(fā)生)潭流,你可以使用如下命令替換掉本地改動:

git checkout -- <filename>

此命令會使用 HEAD 中的最新內(nèi)容替換掉你的工作目錄中的文件竞惋。已添加到暫存區(qū)的改動以及新文件都不會受到影響。


假如你想丟棄你在本地的所有改動與提交灰嫉,可以到服務(wù)器上獲取最新的版本歷史拆宛,并將你本地主分支指向它

git fetch origin
git reset --hard origin/master

使用小貼士

彩色的git輸出

git config color.ui true

顯示歷史記錄時,每一個提交信息只顯示一行

git config format.pretty oneline

交互式添加文件到暫存區(qū)

git add -i

下面介紹一些工作中常用的小技巧:

撤銷剛剛git add(暫存區(qū)的文件)

git reset --hard <filename>
撤銷暫存區(qū)中指定的commit之前的提交
git reset --hard <commit的hash值>

注:--hard丟棄working directory中內(nèi)容的修改
--soft保留working directory中內(nèi)容的修改

修改commit最新一次的注釋信息

git commit -amend

會打開編輯器讼撒,可能是nano浑厚,或vim
修改以后,重新push到遠端倉庫

git push master origin  -f

另外:

git commit -amend -m 'msg'

修改commit的歷史注釋信息

git rebase -i head~2

修改前2條提交記錄

版本回退

版本回退椿肩,需要使用git commit提交ID瞻颂,查看如下命令:

git log

回到指定版本

git reset --hard  <commit hash value>

遠端倉庫也回退

git push origin <branch> -f

忽略文件

如果忽略文件,在倉庫中創(chuàng)建 .gitignore

vim .gitignore
*.pyc
/tmp
database.config
.gitignore
.tmp

進行匹配郑象,匹配成功文就不會添加到work directory.

儲藏(Stashing)

經(jīng)常有這樣的事情發(fā)生贡这,當你正在進行項目中某一部分的工作,里面的東西處于一個比較雜亂的狀態(tài)厂榛,而你想轉(zhuǎn)到其他分支上進行一些工作盖矫。問題是,你不想提交進行了一半的工作击奶,否則以后你無法回到這個工作點辈双。解決這個問題的辦法就是git stash命令。

“‘儲藏”“可以獲取你工作目錄的中間狀態(tài)——也就是你修改過的被追蹤的文件和暫存的變更——并將它保存到一個未完結(jié)變更的堆棧中柜砾,隨時可以重新應(yīng)用湃望。

git stash

查看儲藏的信息

git stash list

放出儲藏

git stash pop <stash index>

多個倉庫,開發(fā)

在公司開發(fā),一般都是將項目clone到自己名下的倉庫中痰驱,進行開發(fā)证芭,如何在本地拉去項目中最新的項目。
修改git配置文件 .git/config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@github.com:jacksonyoudi/python-note.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "google"]
        url = git@github.com:google/python-note.git
        fetch = +refs/heads/*:refs/remotes/origin/*

按上面配置好以后
拉取項目最新代碼担映,合并到本地

git pull google master

推送到項目上废士,而非自己倉庫

git push google feature
望見

git的內(nèi)容就介紹到這里,以上都是皮毛蝇完,你只當做入門的初級文章即可官硝,不必深究矗蕊。如果有精力,希望你配置好github.
如想深入氢架,建議官方文檔傻咖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市达箍,隨后出現(xiàn)的幾起案子没龙,更是在濱河造成了極大的恐慌,老刑警劉巖缎玫,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硬纤,死亡現(xiàn)場離奇詭異,居然都是意外死亡赃磨,警方通過查閱死者的電腦和手機筝家,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邻辉,“玉大人溪王,你說我怎么就攤上這事≈岛В” “怎么了莹菱?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吱瘩。 經(jīng)常有香客問我道伟,道長,這世上最難降的妖魔是什么使碾? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任蜜徽,我火速辦了婚禮,結(jié)果婚禮上票摇,老公的妹妹穿的比我還像新娘拘鞋。我一直安慰自己,他們只是感情好矢门,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布盆色。 她就那樣靜靜地躺著,像睡著了一般祟剔。 火紅的嫁衣襯著肌膚如雪傅事。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天峡扩,我揣著相機與錄音,去河邊找鬼障本。 笑死教届,一個胖子當著我的面吹牛响鹃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播案训,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼买置,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了强霎?” 一聲冷哼從身側(cè)響起忿项,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎城舞,沒想到半個月后轩触,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡家夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年脱柱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拉馋。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡榨为,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煌茴,到底是詐尸還是另有隱情随闺,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布蔓腐,位于F島的核電站矩乐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏合住。R本人自食惡果不足惜绰精,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望透葛。 院中可真熱鬧笨使,春花似錦、人聲如沸僚害。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萨蚕。三九已至靶草,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岳遥,已是汗流浹背奕翔。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浩蓉,地道東北人派继。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓宾袜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驾窟。 傳聞我的和親對象是個殘疾皇子庆猫,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,668評論 4 54
  • Git是目前最流行的版本管理系統(tǒng)绅络,也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,717評論 1 17
  • 風月培,靜靜的吹著,帶走一絲困乏恩急,沒有星星的夜空中杉畜,月亮獨自守著,掛在樹梢假栓,柔和的光線撒在整片河灘寻行。九月份,沙澧河蟹味...
    弟垅閱讀 274評論 2 2
  • 沒由來的心悸匾荆,好像已經(jīng)很久很久沒有的感覺拌蜘,久到我以為我從未有過這種感覺,但這次覺得以前的有些幼稚牙丽,我突然改變我的...
    匿于塵埃閱讀 156評論 0 0
  • 第一次做這樣的思維導圖烤芦,以后有待加強
    小欣_Angelina閱讀 234評論 5 0