Git 入門系列(一)- Git 概念/安裝/基本操作/遠(yuǎn)程推送更新

Git 用于管理代碼提交,是開發(fā)必不可少的環(huán)節(jié)截珍,可以有效保證功能正向迭代锚扎,解決多人開發(fā)配合問題吞瞪。

看不懂?

沒關(guān)系驾孔,往下看 ↓↓↓

小白劇場(chǎng):
老大讓小王和小李共同完成一套軟件開發(fā)芍秆,小王做功能 1惯疙,小李做功能 2。

  • 在一個(gè)項(xiàng)目中小李不能等小王做完了妖啥,把項(xiàng)目文件給小李再做吧霉颠。可是一起做的話荆虱,怎么把兩個(gè)人的代碼放到一起呢掉分?
  • 小王開發(fā)過程中已經(jīng)先寫了些基本方法,小李開發(fā)的時(shí)候想用克伊,怎么辦呢,再寫一個(gè)华坦?
  • 兩個(gè)人都改了同一個(gè)文件愿吹,誰改了哪里呢,為什么改呢惜姐,那部分是最新的呢犁跪?
  • 小組新來個(gè)成員小張,一同參與開發(fā)歹袁,把整個(gè)工程復(fù)制給他坷衍?
  • 老大想讓小張做功能 3,功能 3 開發(fā)完了条舔,老大說枫耳,這個(gè)功能不要了,小張:…… (我好難懊峡埂)

Git 就用來解決類似這些問題的迁杨!

Git 概念

什么是 Git?

  • Git 是一個(gè)分布式版本控制系統(tǒng)

什么是版本控制系統(tǒng)凄硼?

版本控制系統(tǒng)是一種記錄一個(gè)或若干文件內(nèi)容變化铅协,以便將來查閱特定版本修訂情況的系統(tǒng)。版本控制系統(tǒng)不僅可以應(yīng)用于軟件源代碼的文本文件摊沉,而且可以對(duì)任何類型的文件進(jìn)行版本控制狐史。

簡(jiǎn)短來說,就是幫助我們管理文件的说墨,文件的創(chuàng)建骏全、更新和刪除都可以被記錄,代替?zhèn)浞萃竦叮賯浞?/p>

集中式 & 分布式

  • 為了讓不同系統(tǒng)上的開發(fā)者能夠協(xié)同工作吟温,集中化的版本控制系統(tǒng)應(yīng)運(yùn)而生(CVCS)。這類系統(tǒng)都有一個(gè)單一的集中管理的服務(wù)器突颊,保存所有文件的修訂版本鲁豪。而協(xié)同工作的人們都通過客戶端連接到這臺(tái)服務(wù)器潘悼,獲取最新的文件或者提交更新。集中化的版本控制系統(tǒng)爬橡,最顯而易見的缺點(diǎn)是中央服務(wù)器的單點(diǎn)故障問題治唤。如果宕機(jī),那么就會(huì)出現(xiàn)誰都無法提交更新的情況糙申,那么也就無法協(xié)同工作宾添;如果磁盤發(fā)生故障,而備份又不夠即時(shí)柜裸,那么就有丟失數(shù)據(jù)的風(fēng)險(xiǎn)缕陕,最壞的情況是丟失整個(gè)項(xiàng)目的歷史更改記錄。典型的例子就是SVN疙挺。因此扛邑,分布式版本控制系統(tǒng)問世了。


    image
  • 在分布式版本控制系統(tǒng)(DVCS)中铐然,客戶端不僅僅是只提取最新版本的文件快照蔬崩,而是把代碼倉(cāng)庫(kù)完整的鏡像下來。所以每一次提取的操作搀暑,都是對(duì)代碼倉(cāng)庫(kù)的完整備份沥阳,因此也就不必?fù)?dān)心協(xié)同工作用的服務(wù)器發(fā)生故障。經(jīng)典的列子就是Git自点。


    image

Git的安裝

可以從 Git 官網(wǎng)直接下載安裝程序
關(guān)于安裝 Git桐罕,可以看這個(gè)鏈接 https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
安裝完成后,打開git bash 輸入 git --verison 有版本信息即安裝成功

Git的基本使用

個(gè)人信息設(shè)置

這是因?yàn)?Git 是分布式版本控制系統(tǒng)樟氢,所以冈绊,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和 Email 地址(用來分辨編輯者)

在開始菜單中找到 git-->git bash

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

git config 命令中的 --global 參數(shù), 表示你這臺(tái)機(jī)器上所有的 Git 倉(cāng)庫(kù)都會(huì)使用這個(gè)配置
配置好之后可以使用 git config -l查看配置

創(chuàng)建倉(cāng)庫(kù)(repository)

倉(cāng)庫(kù)(repository)埠啃,可以理解成把想要管理的內(nèi)容(或文件等)放在一個(gè)指定的目錄下死宣,那么這個(gè)目錄里的內(nèi)容就是要被管理的內(nèi)容。就好比一個(gè)實(shí)體的倉(cāng)庫(kù)碴开,需要記錄著貨物入庫(kù)毅该、出庫(kù)信息及記錄,這些記錄將會(huì)由 Git 工具來生成潦牛。

那么先創(chuàng)建一個(gè)倉(cāng)庫(kù)

在目標(biāo)目錄中眶掌,打開 git 執(zhí)行 git init 以創(chuàng)建空的 Git 倉(cāng)庫(kù)(repositories)


創(chuàng)建版本庫(kù)會(huì)自動(dòng)生成一個(gè).git目錄,該目錄就是 Git 用來管理版本庫(kù)的巴碗,這個(gè)目錄默認(rèn)是隱藏的朴爬。

查看狀態(tài)

小白劇場(chǎng):使用 Git 管理,文件狀態(tài)變更會(huì)比較謹(jǐn)慎橡淆,還以實(shí)體倉(cāng)庫(kù)為例召噩,有一批新增貨物想入庫(kù)母赵,從打算入庫(kù)到最后入庫(kù)并生成記錄是要經(jīng)歷幾個(gè)過程的。

  • 首先是所有可能入庫(kù)的部分具滴,比如凹嘲,T恤、襯衫构韵、牛仔褲
  • 然后我決定先不要襯衫周蹭,先把T恤和牛仔褲入庫(kù),放在待入庫(kù)清單中
  • 最后疲恢,把清單的內(nèi)容放進(jìn)倉(cāng)庫(kù)管理凶朗,并且說明一下,這次我添加了T恤 xx 件显拳,牛仔褲 xx 條等等

想知道修改的文件處于哪個(gè)狀態(tài)俱尼,就使用 status 查看

先新建一個(gè)名為 test 的文本,使用 git status 查看當(dāng)前文件狀態(tài)


Untracked files 表示當(dāng)前文件沒有添加到 Git 中(沒有被 Git 管理)萎攒,下一步使用git add 添加下文件

添加與提交

上面用實(shí)體倉(cāng)庫(kù)的例子說明了服裝入庫(kù)的過程,這也是Git 管理的工作流

Git 管理的工作流


在 Git 內(nèi)部文件有三種狀態(tài):已修改矛绘,已暫存和已提交耍休。

  • 已修改:表示修改了某個(gè)文件,但還沒有提交保存货矮;
  • 已暫存:表示把已修改的文件放在下次提交時(shí)要保存的清單中了羊精;
  • 已提交:表示該文件已經(jīng)被安全的保存在本地倉(cāng)庫(kù)中了。

Git 在管理項(xiàng)目時(shí)囚玫,文件流轉(zhuǎn)的三個(gè)工作區(qū)域是:

  1. 本地倉(cāng)庫(kù)(即工作目錄 working dir喧锦,也就是項(xiàng)目的源文件)
  2. 暫存區(qū)(index), 臨時(shí)保存改動(dòng)
  3. Git 的工作目錄(Head抓督,指向最近一次一提交的結(jié)果)

因此燃少,基本的 Git 工作流程如下:

  1. 在本地的工作目錄修改某些文件;
  2. 然后對(duì)修改后的文件進(jìn)行快照铃在,保存到暫存區(qū)域阵具;
  3. 最后提交更新,將保存在暫存區(qū)域中的文件快照永久轉(zhuǎn)存到 Git 的工作目錄中定铜。

添加

小白劇場(chǎng):小王在目錄里添加了個(gè) test 文件阳液,此時(shí)這個(gè)文件在處于已修改狀態(tài),改動(dòng)的文件就在工作區(qū)揣炕。如果要記錄這次改動(dòng)帘皿,需要把文件添加到暫存區(qū)(可以理解成待保存清單)
一般來說 windows 系統(tǒng)下,會(huì)用紅色表示工作區(qū)文件畸陡,綠色表示暫存區(qū)文件

上面的過程鹰溜,從 工作區(qū)-->暫存區(qū) 使用 add 命令
add 這個(gè)命令有主要有兩種用法

  1. git add <file> 表示把某個(gè)文件添加到待提交清單中(即暫存區(qū))虽填,如:git add test.txt
  2. git add . 用"." 表示當(dāng)前所有文件都添加到暫存區(qū)
    添加之后,我們可以再查看下狀態(tài)

提交

小白劇場(chǎng):小王要保存 添加 test 這個(gè)文件的記錄奉狈, 已經(jīng)通過 add 把文件提交到暫存區(qū)了卤唉,現(xiàn)在想為這次保存生成一次記錄,以便后面可以查看等操作仁期。提交就是生成一次記錄桑驱。

上面的過程,從 暫存區(qū)--> git倉(cāng)庫(kù) 使用 commit 命令

使用git commit -m "代碼提交信息" 提交修改 -m后面輸入的是本次提交的說明跛蛋,可以輸入任意內(nèi)容熬的,當(dāng)然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動(dòng)記錄

commit 后赊级,改動(dòng)已經(jīng)在本地倉(cāng)庫(kù)的Head中了(Head指的是當(dāng)前的分支指向押框,后面介紹分支的時(shí)候會(huì)說明)

我們開始修改 test 文件,并保存


可以通過git diff查看差異


按照前面的步驟理逊,做二次提交

查看日志

使用git log 來查看提交的日志

遠(yuǎn)程倉(cāng)庫(kù)操作

以上都是在本地倉(cāng)庫(kù)的操作橡伞,如果是多人協(xié)作時(shí),就需要遠(yuǎn)程倉(cāng)庫(kù)來完成了晋被。

小白劇場(chǎng):小王先建立了 test 文件兑徘,小李也要在 test 文件改內(nèi)容,所以小王得把這個(gè)文件放在遠(yuǎn)程倉(cāng)庫(kù)里羡洛,等小李用的時(shí)候挂脑,從遠(yuǎn)程倉(cāng)庫(kù)里獲取就行了。
遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)的概念一樣欲侮,只不過內(nèi)容放在服務(wù)器上存儲(chǔ)

Q:本地倉(cāng)庫(kù)如何關(guān)聯(lián)到遠(yuǎn)程倉(cāng)庫(kù)中

git remote add origin xxx xxx 為遠(yuǎn)端 Git 倉(cāng)庫(kù)的地址
此處我在 GitHub上建立了一個(gè)項(xiàng)目(用作遠(yuǎn)程倉(cāng)庫(kù))

Git 是版本控制系統(tǒng)崭闲,GitHub 是在線的基于 Git 的代碼托管服務(wù),可創(chuàng)建公開的(public)代碼倉(cāng)庫(kù)威蕉,很多優(yōu)秀的開源項(xiàng)目都在 GitHub 上


如果你也想用 GitHub 來做版本管理刁俭,注冊(cè)賬號(hào)建立個(gè)倉(cāng)庫(kù),后續(xù)的操作 GitHub都有良好的引導(dǎo)


回到主題

這行下面兩句就可以將本地關(guān)聯(lián)到遠(yuǎn)程了(地址使用的是新建的 GitHub 倉(cāng)庫(kù)地址)

git remote add origin https://github.com/tingtingtina/gitStudy.git
git push -u origin master

遠(yuǎn)程提交

小白劇場(chǎng):小王已經(jīng)建立好遠(yuǎn)程倉(cāng)庫(kù)了韧涨,并和本地內(nèi)容做了關(guān)聯(lián)薄翅,但是此時(shí)遠(yuǎn)端還沒有內(nèi)容,如果這部分已經(jīng)核實(shí)要共享給他人協(xié)作了氓奈,就需要把本地的內(nèi)容推送到遠(yuǎn)端倉(cāng)庫(kù)中

關(guān)聯(lián)之后可以翘魄,我們改一下 test 內(nèi)容,建立第三次提交


完成第三次commit后舀奶,看到有個(gè)push 的提示暑竟,當(dāng)前改動(dòng)已經(jīng)在本地倉(cāng)庫(kù)中了,如果要把提交提到遠(yuǎn)端倉(cāng)庫(kù)則需執(zhí)行git push 即可(第一次需要輸入GitHub賬號(hào)和密碼)

Q:我們?nèi)绾芜h(yuǎn)端倉(cāng)庫(kù)的內(nèi)容復(fù)制到本地呢族檬?

小王已經(jīng)把最新的 test 放在 遠(yuǎn)程倉(cāng)庫(kù)中了(也可以直接理解成服務(wù)器)糊闽,小李怎么用呢?首先小李需要也需要打通這個(gè)渠道诅蝶,在報(bào)了家門腹躁,配置好 git 之后桑包,需要先把這個(gè)項(xiàng)目“克隆”一下

在目標(biāo)文件夾下打開git bash git clone xxx xxx 為遠(yuǎn)端倉(cāng)庫(kù)地址,當(dāng)進(jìn)度完成100% 項(xiàng)目就 clone 完成了纺非,會(huì)在目標(biāo)目錄中看到項(xiàng)目目錄


我們進(jìn)入到項(xiàng)目目錄中哑了,查看log,和遠(yuǎn)端的一致

遠(yuǎn)端拉取

小李 clone 項(xiàng)目之后烧颖,會(huì)有和小王 一樣的內(nèi)容弱左,此時(shí)小王又更新了文件,并且push了到遠(yuǎn)端了炕淮,小李怎么同步呢拆火?

前面介紹了如何提交,現(xiàn)在介紹下如何拉韧吭病(同步)內(nèi)容
我們先通過 GitHub提交一次(模擬多人協(xié)作時(shí)们镜,其他人提交了內(nèi)容)
修改下內(nèi)容



寫下日志 commit change
(PS: 發(fā)現(xiàn)有些瀏覽器對(duì) GitHub 支持不太一樣,如果在 GitHub 直接提交的話润歉,建議使用 Google 瀏覽器)

此時(shí)改項(xiàng)目有4次提交


使用git pull來拉取內(nèi)容

完成后憎账,再看看文件,確實(shí)更新了

使用 git push 和 git pull 進(jìn)行推送和拉取更新都是在當(dāng)前分支上操作的卡辰,目標(biāo)也是遠(yuǎn)端對(duì)應(yīng)的分支,默認(rèn)Head 是 master 分支邪意,也就是
push 是把 本地master分支 推送到 遠(yuǎn)程master 分支
pull 是從 遠(yuǎn)程master分支 拉取到 本地master 分支

對(duì)于分支的操作九妈,我們下期再了解。

回顧總結(jié)

再來回顧下常見的 git 命令

git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config -l

注:clone 和 init 都是倉(cāng)庫(kù)初始化的方式, 不同的是 init 是先建立本地倉(cāng)庫(kù)雾鬼,如果有需要可以公開萌朱,比如發(fā)到GitHub上托管,多人協(xié)作等策菜。而 clone 是已經(jīng)有遠(yuǎn)程倉(cāng)庫(kù)了晶疼,克隆復(fù)制一份到本地

git clone xxx 從遠(yuǎn)端git倉(cāng)庫(kù)克隆一份到本地
git init 創(chuàng)建本地倉(cāng)庫(kù)
git add <file> 添加文件到緩存區(qū)(可以理解成提交想要提交的文件)
git add . 將工作區(qū)所有改動(dòng)文件都提交到緩存區(qū)
git commit -m xxx 將緩存區(qū)的內(nèi)容提交到本地倉(cāng)庫(kù),xxx為提交日志
git push 本地倉(cāng)庫(kù)內(nèi)容提交到遠(yuǎn)端
git pull 從遠(yuǎn)端獲取更新到本地
git stash 查看當(dāng)前文件狀態(tài)(哪些在緩存區(qū)又憨,哪些在工作區(qū))
git log 查看日志信息

git remote add origin xxx // 本地倉(cāng)庫(kù)添加到遠(yuǎn)端
git push -u origin master

git diff 查看差別(了解即可)翠霍,可以使用git diff commitid 查看與某次提交的改動(dòng)(commitid, 提交的哈希值蠢莺,通過git log 可知)寒匙,如下面(一般輸入前幾位就夠了)

本篇內(nèi)容就到這里了,后面會(huì)繼續(xù)了解 Git 的使用

系列文章傳送門

Git 入門系列(一)- Git 概念/安裝/基本操作/遠(yuǎn)程推送更新
Git 入門系列(二)- 修改管理 / 撤銷操作 / 命令及區(qū)間關(guān)系
Git 入門系列(三)- 分支(上)創(chuàng)建與切換 / 合并 / 查看 / 刪除
Git 入門系列(四)- 分支(下)合并解決沖突 / 遠(yuǎn)程分支
Git 入門系列(五)- stash 貯藏
Git 入門系列(六)- 標(biāo)簽 tag
Git 入門系列(七)- 可視化 Git 管理工具
Git 入門系列(八) - FAQ

歡迎關(guān)注個(gè)人公眾號(hào)躏将,【程序媛春哥的手記】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锄弱,一起剝皮案震驚了整個(gè)濱河市考蕾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌会宪,老刑警劉巖肖卧,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掸鹅,居然都是意外死亡塞帐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門河劝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壁榕,“玉大人,你說我怎么就攤上這事赎瞎∨评铮” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵务甥,是天一觀的道長(zhǎng)牡辽。 經(jīng)常有香客問我,道長(zhǎng)敞临,這世上最難降的妖魔是什么态辛? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮挺尿,結(jié)果婚禮上奏黑,老公的妹妹穿的比我還像新娘。我一直安慰自己编矾,他們只是感情好熟史,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窄俏,像睡著了一般蹂匹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凹蜈,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天限寞,我揣著相機(jī)與錄音,去河邊找鬼仰坦。 笑死履植,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悄晃。 我是一名探鬼主播静尼,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了鼠渺?” 一聲冷哼從身側(cè)響起鸭巴,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拦盹,沒想到半個(gè)月后鹃祖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡普舆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年恬口,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沼侣。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祖能,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛾洛,到底是詐尸還是另有隱情养铸,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布轧膘,位于F島的核電站钞螟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谎碍。R本人自食惡果不足惜鳞滨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟆淀。 院中可真熱鬧拯啦,春花似錦、人聲如沸熔任。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笋敞。三九已至,卻和暖如春荠瘪,著一層夾襖步出監(jiān)牢的瞬間夯巷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工哀墓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趁餐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓篮绰,卻偏偏與公主長(zhǎng)得像后雷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • 但我并不想在阿細(xì)面前炫耀臀突,畢竟她處境艱難勉抓,我繼續(xù)分析她的情況: “我覺得對(duì)于你來說,第一條其實(shí)沒什么太大的問題候学,既...
    Hushcookies閱讀 310評(píng)論 0 0
  • 剪蹬大缸有感 剪紙\文 藍(lán)玫 你 原來藏在哪 曾苦苦追尋 撕毀了一張又一張日歷 總也找尋不到你的足跡 今天 拿起剪...
    藍(lán)玫馨香閱讀 174評(píng)論 0 2
  • 有個(gè)人一天碰到上帝...... 上帝藕筋,大發(fā)善心打算給那人一個(gè)愿望 上帝問: “你有什么愿望嗎?” 那個(gè)人想了想.....
    綠鼻子的一生閱讀 153評(píng)論 2 4
  • 文|快樂天成 清晨當(dāng)黎明的太陽從東方升起,萬物從沉睡中蘇醒掰茶,預(yù)示著美好一天開始了一個(gè)嶄新的日子正向你走來暇藏,擁抱吧!...
    快樂天成閱讀 224評(píng)論 1 6