git


typora-copy-images-to: medias

1. git

1.1. 學(xué)習(xí)目標(biāo)

  • 理解
    • 常用bash系統(tǒng)命令
    • git 的概念
    • git 和 svn 的區(qū)別
    • git 的工作流程
    • git 管理文件版本
    • 使用遠(yuǎn)程倉(cāng)庫(kù)
    • 分支管理
    • 沖突
  • 應(yīng)用

1.2. 認(rèn)識(shí)命令行 了解

1.2.1. shell

? Shell 俗稱殼(用來(lái)區(qū)別于核)钧栖,是指“提供使用者使用界面”的軟件(命令解析器)

1525664062775.png

? cmd shell 是系統(tǒng)提供的最基本的shell,功能也相對(duì)基礎(chǔ)。

? powser shell 和 git bash shell 可以理解是對(duì) cmd shell 的一層封裝,提供了更為強(qiáng)大的命令。

? 我們平常在系統(tǒng)上所進(jìn)行的操作啸如,如新增文件,編輯文件,刪除文件等蒜撮。其實(shí)底層都是通過(guò)一系列的命令來(lái)執(zhí)行的。

1.2.2. 常見(jiàn)bash命令

pwd (Print Working Directory) 查看當(dāng)前目錄

cd (Change Directory) 切換目錄跪呈,如 cd /etc  ../上級(jí)目錄  

ls (List) 查看當(dāng)前目錄下內(nèi)容段磨,如 ls 

mkdir (Make Directory) 創(chuàng)建目錄取逾,如 mkdir blog

touch 創(chuàng)建文件,如 touch index.html

cat 查看文件全部?jī)?nèi)容苹支,如 catindex.html


rm (remove) 刪除文件菌赖,如 rm index.html、rm -rf  blog

rmdir (Remove Directory) 刪除文件夾沐序,只能刪除空文件夾琉用,不常用

mv (move) 移動(dòng)文件或重命名,如 mv index.html ./demo/index.html

cp (copy) 復(fù)制文件策幼,cp index.html ./demo/index.html

head 查看文件前幾行邑时,如 head -5 index.html

history 查看操作歷史

whoami 查看當(dāng)前用戶

【注意】,在命令行當(dāng)中 使用快捷鍵 進(jìn)行復(fù)制粘貼都是沒(méi)有效果的特姐。

  • ctrl + p 沒(méi)有效果
  • ctrl + c 強(qiáng)制退出到 命令行當(dāng)中

1.2.3. vi編輯器

  • vi編輯器是Linux和Unix上最基本的文本編輯器晶丘。由于不需要圖形界面,vi是效率很高的文本編輯器
  • vi編輯器提供了3種模式唐含,分別是命令模式浅浮、插入模式、末行模式 每種模式有不同的功能
1525665671693.png
a) 打開(kāi)/創(chuàng)建文件捷枯, vi 文件路徑
b) 末行模式 :w保存滚秩,:w filenme另存為
c) 末行模式 :q退出
d) 末行模式 :wq保存并退出
e) 末行模式 :e! 撤銷更改,返回到上一次保存的狀態(tài)
f) 末行模式 :q! 不保存強(qiáng)制退出

================================================================

h) 命令模式 ZZ(大寫)保存并退出
i) 命令模式 u轍銷操作淮捆,可多次使用
j) 命令模式 dd刪除當(dāng)前行
k) 命令模式 yy復(fù)制當(dāng)前行
l) 命令模式 p 粘貼內(nèi)容
o) 命令模式 i進(jìn)入編輯模式郁油,當(dāng)前光標(biāo)處插入
p) 命令模式 a進(jìn)入編輯模式,當(dāng)前光標(biāo)后插入
q) 命令模式 A進(jìn)入編輯模式攀痊,光標(biāo)移動(dòng)到行尾
r) 命令模式 o進(jìn)入編輯模式桐腌,當(dāng)前行下面插入新行
s) 命令模式 O進(jìn)入編輯模式,當(dāng)前行上面插入新行

1.3. git概述

? Git是一款免費(fèi)苟径、開(kāi)源的分布式版本控制系統(tǒng)案站,用于敏捷高效地處理任何或小或大的項(xiàng)目。

它可以處理以下需求

  • 方便的和團(tuán)隊(duì)共享文件
  • 對(duì)文件進(jìn)行版本的控制

Git百度百科

1.4. git和svn對(duì)比

區(qū)別:

git:在沒(méi)有網(wǎng)絡(luò)的情況下可以使用

svn:一定要在有網(wǎng)絡(luò)的情況下使用

1.4.1. svn

? SVN是集中式版本控制系統(tǒng)棘街,版本庫(kù)是集中放在中央服務(wù)器的蟆盐。

每次需要獲取最新的文件或者保存自己當(dāng)前的記錄時(shí),都必須要連接到服務(wù)器才可以蹬碧。

關(guān)鍵字

  • 集中式
  • 需要連接外網(wǎng)


    1525849453223.png

1.4.2. git

? Git是分布式版本控制系統(tǒng)舱禽,它沒(méi)有中央服務(wù)器,每個(gè)人的電腦就是一個(gè)完整的版本庫(kù)恩沽。

當(dāng)需要和別人分享文件時(shí)時(shí)誊稚,再聯(lián)網(wǎng)即可。

關(guān)鍵字:

  • 分布式
1525849575573.png

1.5. git 安裝

? Git可以在Linux、Unix里伯、Mac和Windows這幾大平臺(tái)上正常運(yùn)行使用城瞎。

下載地址

1525849875115.png

? 安裝成功后(windows下),在系統(tǒng)的任意目錄下 點(diǎn)擊 鼠標(biāo)右鍵 出現(xiàn)以下菜單疾瓮,代表安裝成功脖镀。

1525849962486.png

1.6. 初次運(yùn)行 Git 前的配置

? 在團(tuán)隊(duì)的項(xiàng)目開(kāi)發(fā)中,當(dāng)我們對(duì)進(jìn)行文件的修改時(shí)狼电,都應(yīng)該告訴服務(wù)器 是誰(shuí)做的修改蜒灰。所以 需要 配置個(gè)人信息。

1.6.1. 全局配置

? 打開(kāi) git 命令行工具

1525850607969.png

? 輸入

# 配置 用戶名
git config --global  user.name  xxx 

# 配置 郵箱
git config --global  user.email  xxx 

# 查看用戶名
git config   user.name  

1.7. git 基礎(chǔ)

? 如 我們想使用 git 對(duì) 該目錄進(jìn)行版本控制

1525851471188.png

1.7.1. 創(chuàng)建版本庫(kù)

? 在 我的第一個(gè)網(wǎng)站 目錄 內(nèi) 輸入 git init 初始化 倉(cāng)庫(kù)

git init 

? 可以看到肩碟,在該目錄下 多了一個(gè) 隱藏文件夾 .git 該文件夾便是實(shí)現(xiàn)存放版本記錄的地方强窖。不要手動(dòng)修改!

1525851668248.png

1.7.2. 添加到暫存區(qū)

? 現(xiàn)在我們的代碼 和 git 倉(cāng)庫(kù) 還沒(méi)有直接的聯(lián)系 查看 git 倉(cāng)庫(kù)狀態(tài) 輸入 git status

git git status
1525852100376.png

? 我們把添加跟蹤的步驟削祈,叫做 添加到 暫存區(qū)

? 輸入 git add * 對(duì)所有文件進(jìn)行跟蹤

git add * 

? 此時(shí)翅溺,重新 查看 倉(cāng)庫(kù)狀態(tài)

git status 
1525852288499.png

? 因此,我們可以 隨時(shí)的 輸入 git status 來(lái)查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)髓抑,來(lái)獲得 提示咙崎。

1.7.3. 提交本地倉(cāng)庫(kù)

? 暫存區(qū)的意思 只是暫時(shí)存儲(chǔ)文件,當(dāng)需要把對(duì)文件的操作 永久存儲(chǔ)下來(lái)時(shí)吨拍,需要在把暫存區(qū)中的文件提交到到本地倉(cāng)庫(kù)褪猛。

? 輸入以下命令進(jìn)行提交,同時(shí) 還需要備注 信息 如 初始化項(xiàng)目 密末、 新增了購(gòu)物接口 等握爷。

git commit -m "初始化項(xiàng)目"

? 重新輸入 git status 查看git 倉(cāng)庫(kù)狀態(tài)

1525853095009.png

1.7.4. 小結(jié)

? 把剛才操作的流程,換成專業(yè)的術(shù)語(yǔ)严里。

  • 工作目錄 :剛才操作的文件夾 我的第一個(gè)網(wǎng)站 就稱為 工作目錄
  • 暫存區(qū) : 是用來(lái)存放 對(duì)文件進(jìn)行了 跟蹤,但是還沒(méi)有 提交到 本地倉(cāng)庫(kù) 的地方
  • 本地倉(cāng)庫(kù): 最終實(shí)現(xiàn) 文件版本管理的地方追城。
1525853953043.png

1.8. 修改文件

? 在上個(gè)操作的基礎(chǔ)上刹碾,我們對(duì)文件進(jìn)行修改,然后讓 git 記錄這次修改的操作座柱。

編輯 index.html 文件 輸入

<h1>完成了登錄頁(yè)面的設(shè)計(jì)</h1>

? 此 時(shí) index.html 文件發(fā)生了修改 我們輸入 git status 查看倉(cāng)庫(kù)狀態(tài)

1525854096520.png

1.8.1. 添加到暫存區(qū)

? 以上的修改迷帜,可以理解為 完成了一個(gè)功能,此時(shí)色洞,也需要將這些代碼提交到 本地倉(cāng)庫(kù) 中進(jìn)行記錄管理戏锹。因此,先添加到 暫存區(qū) 再提交到 本地倉(cāng)庫(kù) 中即可火诸。

? 將 修改的文件添加到 暫存區(qū) 輸入

git add *

? 查看git 倉(cāng)庫(kù)狀態(tài)
](https://upload-images.jianshu.io/upload_images/6343101-48b7fbce0ba71d19.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1.8.2. 提交到本地倉(cāng)庫(kù)

? 將暫存區(qū)中的文件提交的 本地倉(cāng)庫(kù) 實(shí)現(xiàn) 版本 記錄

git commit -m "完成了登錄功能"

? 查看git 倉(cāng)庫(kù)狀態(tài)

git status
1525854664486.png

1.9. 刪除文件

? 在git 倉(cāng)庫(kù)中锦针,有時(shí)候刪除一些無(wú)效的文件。以刪除 css/index.css 為例

? 手動(dòng)將該 文件夾整個(gè)刪除 刪除成功 如下


1525855125140.png

? 查看倉(cāng)庫(kù)狀態(tài)

git status 
1525855216992.png

1.9.1. 添加到暫存區(qū)

? 刪除了 文件,也可以了解為是對(duì)項(xiàng)目 進(jìn)行了一次升級(jí)改造奈搜,因此同樣需要把該 操作 提交到 本地倉(cāng)庫(kù)

? 輸入 git add ./ 請(qǐng)注意 當(dāng)添加刪除操作時(shí) 使用 git add * 是無(wú)效的悉盆。(git add * 不會(huì)緩存刪除操作)

git add ./
1525855744440.png

1.9.2. 提交到本地倉(cāng)庫(kù)

? 把該 刪除操作 提交到 本地倉(cāng)庫(kù) 實(shí)現(xiàn) 版本記錄

git commit -m "刪除了css文件夾"
1525855898836.png

? 查本地倉(cāng)庫(kù)的狀態(tài)

git status
1525855957999.png

1.10. 忽略文件

? 有時(shí)候,在工作目錄下的某些文件馋吗,是屬于私人的或者是項(xiàng)目運(yùn)行所產(chǎn)生的臨時(shí)文件焕盟,并不需要添加到 版本控制中。 如 新增一個(gè)文件 私人密碼

1525858765405.png

? 查看git倉(cāng)庫(kù)狀態(tài)

git status
1525859125972.png

? 此時(shí) 我們可以使用 git 規(guī)定的一個(gè)文件 .gitignore 在里面指定需要過(guò)濾的文件

1.10.1. 創(chuàng)建 忽略文件清單

? 直接在windows 右鍵 新建文件 gitignore 會(huì)創(chuàng)建失敗宏粤。

? 使用命令行的方式創(chuàng)建

touch .gitignore

? 編輯 .gitignore 文件 直接寫入 要忽略的文件名即可

# 忽略該文件
私人密碼.txt

? 查看git倉(cāng)庫(kù)狀態(tài)

git status
1525859577480.png

大部分情況下脚翘,我們也需要將 .gitignore 文件一起提交到本地倉(cāng)庫(kù)中實(shí)行版本控制

? 添加到暫存區(qū) 該文件 使用 git add * 無(wú)效 需要手動(dòng)指定文件名

git add .gitignore

? 提交到本地倉(cāng)庫(kù)

git commit -m "添加了忽略文件列表"

1.10.2. 忽略文件語(yǔ)法

  • 語(yǔ)法大部分和正則類似

  • 空行或是以#開(kāi)頭的行即注釋行將被忽略;

    # 這種是注釋
    
  • 以斜杠 “/” 結(jié)尾表示目錄绍哎;

    css/
    
  • 以星號(hào) “*” 通配多個(gè)字符堰怨;

    *.js
    
  • 以問(wèn)號(hào) “?” 通配單個(gè)字符

  • 以方括號(hào) “[]” 包含單個(gè)字符的匹配列表;

  • 以嘆號(hào) “!” 表示不忽略(跟蹤)匹配到的文件或目錄蛇摸;

  • 可以在前面添加斜杠 “/” 來(lái)避免遞歸

    # 忽略根目錄下的 css 文件夾
    /css
    # 忽略所有的css文件夾
    css/
    

    ?

1.11. 推送到遠(yuǎn)程倉(cāng)庫(kù)

因?yàn)樵趫F(tuán)隊(duì)開(kāi)發(fā)中备图,我們的項(xiàng)目文件是需要和組員進(jìn)行分享的,所以實(shí)現(xiàn)這個(gè)功能赶袄,就必須得借助遠(yuǎn)程倉(cāng)庫(kù)揽涮。

遠(yuǎn)程倉(cāng)庫(kù)只是 本地倉(cāng)庫(kù)的一個(gè)備份。

目前 用得比較多的有 github碼云

  • github做為最著名的git倉(cāng)庫(kù)托管商,是行業(yè)內(nèi)的絕對(duì)權(quán)威.它給無(wú)數(shù)的開(kāi)發(fā)者提供了共同學(xué)習(xí)發(fā)展的平臺(tái).
  • 碼云是github的國(guó)產(chǎn)版,對(duì)國(guó)人做了針對(duì)性的優(yōu)化,在國(guó)內(nèi)也是使用者眾多

我們主要演示 github的使用饿肺,碼云 強(qiáng)烈建議 課下 自己學(xué)習(xí)使用蒋困。

1.11.1. 注冊(cè) github

先注冊(cè)一個(gè) github帳號(hào)

1525915907144.png

1.11.2. 新建遠(yuǎn)程倉(cāng)庫(kù)

1 一個(gè)github帳號(hào)可以建立多個(gè)遠(yuǎn)程倉(cāng)庫(kù),一般 一個(gè)項(xiàng)目使用一個(gè)倉(cāng)庫(kù)敬辣。

1525916009292.png

2 填寫倉(cāng)庫(kù)信息

1525916256235.png

3 創(chuàng)建成功

1525916479663.png

1.11.3. 推送到遠(yuǎn)程倉(cāng)庫(kù)

? 遠(yuǎn)程倉(cāng)庫(kù)建立完畢之后雪标,我們可以 將 之前的 本地倉(cāng)庫(kù) 我的第一個(gè)網(wǎng)站 推送到上面新建的 test 遠(yuǎn)程倉(cāng)庫(kù)上

? 先記錄遠(yuǎn)程倉(cāng)庫(kù)的地址

1525916715340.png
https://github.com/itcastWsy/test.git

? 把遠(yuǎn)程倉(cāng)庫(kù) 記錄在一個(gè) 變量 origin 上 該名字可自定義

git remote add origin https://github.com/itcastWsy/test.git

? 在推送到遠(yuǎn)程倉(cāng)庫(kù)之前,先確保 本地倉(cāng)庫(kù)已經(jīng) 執(zhí)行過(guò) commit 了溉跃,這樣 才會(huì)保證 本地倉(cāng)庫(kù) 和遠(yuǎn)程倉(cāng)庫(kù)一致村刨。

? 查看本地倉(cāng)庫(kù)狀態(tài)

git status
1525855125140.png

? 開(kāi)始推送

git push -u origin master

//第二次推送的時(shí)候直接使用
git push 

? 提示輸入用戶名 ,直接輸入即可 如 itcastWsy 然后按下回車

1525917393459.png

? 提示輸入密碼

1525917512404
1525917512404

沒(méi)有看到報(bào)錯(cuò)撰茎,就是 推送成功

1525917563467
1525917563467

同時(shí)嵌牺,刷新一下 github 頁(yè)面 看到遠(yuǎn)程倉(cāng)庫(kù)上 顯示出 倉(cāng)庫(kù)的信息了。

1525917685788
1525917685788

1.12. 從遠(yuǎn)程倉(cāng)庫(kù)克隆

? 假設(shè) 建立本地倉(cāng)庫(kù)龄糊、 推送到遠(yuǎn)程倉(cāng)庫(kù) 的工作都是項(xiàng)目經(jīng)理完成了逆粹。此時(shí),你做為一個(gè)新加入項(xiàng)目的 程序猿炫惩,要做的事就是從遠(yuǎn)程倉(cāng)庫(kù)上 克隆 代碼僻弹。

? 問(wèn)項(xiàng)目經(jīng)理拿 遠(yuǎn)程倉(cāng)庫(kù)的地址

https://github.com/itcastWsy/test.git

? 在你的電腦上任意目錄下(如 桌面) 開(kāi)始克隆

? 在桌面上 打開(kāi) git bash 命令行工具 輸入

git clone https://github.com/itcastWsy/test.git
1525918417230
1525918417230

1.13. 從遠(yuǎn)程倉(cāng)庫(kù)獲取更新

? 此時(shí),項(xiàng)目經(jīng)理的代碼 和 你的代碼 是一模一樣的∷拢現(xiàn)在 項(xiàng)目經(jīng)理 新增了一個(gè)文件 home.html,并把它提交到遠(yuǎn)程倉(cāng)庫(kù)上蹋绽。

  • 新建 home.html 文件

    touch home.html
    
  • 添加到暫存區(qū)

    git add *
    
  • 提交到本地倉(cāng)庫(kù)

    git commit -m "新增了home.html"
    
  • 推送到遠(yuǎn)程倉(cāng)庫(kù)

    git push 
    
    1525919345574
    1525919345574

? 查看遠(yuǎn)程倉(cāng)庫(kù)

1525919393855
1525919393855

? 那么現(xiàn)在 做為程序員的你 需要把代碼 進(jìn)行更新

? 回到 test 文件夾內(nèi)芭毙,打開(kāi) git bash 命令行

1525919520069
1525919520069

輸入以下命令 進(jìn)行更新

git pull
1525919829352
1525919829352

1.14. git clone 和 git pull 的區(qū)別

  • git clone 是克隆,只需要執(zhí)行一次
  • git pull 是 更新蟋字,后期反復(fù)使用

1.15. 還原文件到上次commit狀態(tài)

? 假設(shè)做為程序員的你稿蹲,剛剛把代碼更新下來(lái),便上廁所去了鹊奖,這個(gè)時(shí)候你的熊孩子趁你不在苛聘,對(duì)著你的鍵盤就是一頓 啪啪啪 ,把你 home.html 文件敲得面目全非忠聚。

? 你現(xiàn)在想要做的事设哗,就是把 home.html 還原到 拉取下來(lái)的狀態(tài)。

? 原來(lái)的home.html 內(nèi)容是空的两蟀。(你是不知道里面的內(nèi)容的)

? 熊孩子 把 home.html 改成了

<h1>錢多話少死的早</h1>

? 開(kāi)始還原网梢,在 test 目錄下,輸入命令行

git checkout  home.html
1525922259127
1525922259127

? 如果想要還原多個(gè)文件赂毯,可以

  • 還原文件夾 css 文件夾

    git checkout css
    
  • 還原當(dāng)前目錄的所有文件

    git checkout ./ 
    

    ?

1.16. 查看版本歷史

? 做為 新加入項(xiàng)目的你战虏,想要了解 這個(gè)項(xiàng)目,到底做過(guò)了哪些版本党涕,想要看到之前每一次提交時(shí)的備注信息

此時(shí)烦感,你的 test 文件夾內(nèi) 輸入 命令進(jìn)行查看

git log
//Ctrl+c  終止命令
git log --oneline  精簡(jiǎn)查看
查看文件內(nèi)容的時(shí)候可以按回車實(shí)現(xiàn)跳轉(zhuǎn)
1525920485139
1525920485139

1.17. 還原到某一個(gè)版本

? 做為 新加入項(xiàng)目的你,來(lái)獲取了最新的代碼之后膛堤,發(fā)現(xiàn)項(xiàng)目太大了手趣,你不好去學(xué)習(xí)和了解 其中的某一個(gè)模塊的功能和代碼。如

1525922607367
1525922607367

此時(shí)肥荔,可以把整個(gè)項(xiàng)目 還原到 完成了登錄功能的狀態(tài)

? 記錄 該版本的 commit 字段

1525922690195
1525922690195

?

3db7762c593251f1a78e518fdd3ed6d6cad626bc
開(kāi)始還原   (commit 字段 最少 寫 6位)
git reset -–hard 3db7762c593251f1a78e518fdd3ed6d6cad626bc
1525922921419
1525922921419

? 如果绿渣,在次狀態(tài)下又想回到 最新的版本 新增了home.html 呢 查看提交信息

git log

? 發(fā)現(xiàn) 完成登錄功能 之后的日志信息 丟失了。

1525923215275
1525923215275

? 此時(shí)燕耿,輸入

git reflog 
1525923554914
1525923554914

? 還原到最新的版本

git reset --hard 5038cc9
1525923659935
1525923659935

1.17.1. 小結(jié)

  • git checkout xxx 只能還原文件到上一個(gè)版本
  • git reset --hard 'commit的id' 可以還原到任意版本
  • git reflog 可以查看丟失了的版本的日志信息

1.18. 配置ssh

? 我們把文件從本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)的方式有兩種

  • HTTPS 每次都要手動(dòng)輸入 用戶名和密碼
  • SSH 配置證書(shū)后中符,不用手動(dòng)輸入用戶名和密碼

1.18.1. 配置證書(shū)

在git bash 命令行中輸入

ssh-keygen -t rsa -C "郵箱地址"

然后一直按回車。直到出現(xiàn)如下界面 代表本地 證書(shū)生成成功

1525933559552
1525933559552

輸入命令 打印密鑰

cat ~/.ssh/id_rsa.pub
1525933696717
1525933696717

按以下步驟進(jìn)行粘貼即可

1525934009733
1525934009733

輸入

ssh -T git@github.com

出現(xiàn)以下界面代表成功缸棵。如果失敗舟茶,建議多嘗試幾次。

1525934471737
1525934471737

1.18.2. 將提交方式 HTTPS 改為 SSH

復(fù)制 SSH 地址

1525934827313
1525934827313
1525934868632
1525934868632
git@github.com:itcastWsy/test.git

修改 origin 地址

因?yàn)橹耙呀?jīng)將 地址 存入 origin 變量了 堵第。查看 origin

git remote -v
1525934970736
1525934970736

此時(shí),將origin的地址 改為 ssh 地址即可

git remote set-url origin git@github.com:itcastWsy/test.git

重新查看 git remote -v 發(fā)現(xiàn)修改成功

1525935054456
1525935054456

按照以上步驟執(zhí)行完畢之后隧出,再次推送到遠(yuǎn)程倉(cāng)庫(kù)時(shí)踏志,就不用再輸入用戶名和密碼了。

測(cè)試

1525935332160
1525935332160

1.19. 分支

? 其實(shí)我們?cè)谑褂胓it的時(shí)候胀瞪,一直在 git的主分支master也是默認(rèn)分支下進(jìn)行工作的针余。也可以手動(dòng)開(kāi)啟另外的分支進(jìn)行開(kāi)發(fā)饲鄙。

? 開(kāi)啟新的的分支時(shí)可以理解為復(fù)制了一個(gè)相同的副本.內(nèi)容完全一樣

? 分支的作用是提供了一種方便、高效的管理項(xiàng)目的手段圆雁。

? 學(xué)習(xí)分支,我們需要從需求入手

1528519197378
1528519197378

? 流程解釋:

  1. 網(wǎng)站發(fā)布了第一個(gè)版本

  2. 此時(shí),需要研發(fā)新功能1.1版本

  3. 開(kāi)啟新的分支dev進(jìn)行研發(fā)

    1. 研發(fā)成功忍级,將分支dev合并到主分支master上,發(fā)布新版本1.1
    2. 研發(fā)失敗,直接刪除分支dev即可

    經(jīng)過(guò)以上流程,我們可以在毫無(wú)風(fēng)險(xiǎn)的情況下開(kāi)發(fā)新功能,不會(huì)影響到已經(jīng)發(fā)布了的網(wǎng)站伪朽。

1.19.1. 網(wǎng)站發(fā)布0版本

在目下下,新建文件夾 web轴咱,并在里新建一個(gè)空的文件index.html 提交到本地倉(cāng)庫(kù)

1528519852700
1528519852700

1.19.2. 開(kāi)啟新分支

? 在完成1.0版本發(fā)布后(commit之后),開(kāi)啟新分支 dev(dev為分支名)

git branch dev

? 查看當(dāng)前倉(cāng)庫(kù)下的分支

git branch 
1528520046133
1528520046133

1.19.3. 切換分支

? 此時(shí)烈涮,需要手動(dòng)切換分支到dev上朴肺,

git checkout dev
1528520161732
1528520161732

1.19.4. 在分支dev上開(kāi)發(fā)功能

? 此時(shí),我們可以在分支dev上坚洽,放心的進(jìn)行功能開(kāi)發(fā)戈稿。編輯文件 index.html 添加一下內(nèi)容

開(kāi)發(fā)新功能1.0

? 提交到倉(cāng)庫(kù)

git add .
git commit -m "dev下開(kāi)發(fā)新功能1.1"
1528520834607
1528520834607

1.19.5. 合并分支

? 新功能開(kāi)發(fā)完畢,需要將分支dev的代碼合并到主分支master

  1. 切換回主分支 master

    git checkout master
    
  2. 合并分支 dev

    git merge dev
    
    1528521188063
    1528521188063

1.19.6. 刪除分支

既然 分支dev的功能已經(jīng)完成讶舰,我們可以將其刪除鞍盗。

git branch -d dev
1525947107745
1525947107745

查看git倉(cāng)庫(kù)下的分支,發(fā)現(xiàn) 分支dev 確實(shí)沒(méi)有了

1525947206980
1525947206980

1.20. 沖突

? 沖突是指當(dāng)兩個(gè)同名的文件進(jìn)行合并時(shí)跳昼,會(huì)產(chǎn)生的一種場(chǎng)景般甲。

1.20.1. 沖突描述

1526001349246
1526001349246

? 當(dāng)把 我的代碼內(nèi)的兩個(gè)文件 拷貝到 他的代碼 文件夾內(nèi)時(shí)

1526001545996
1526001545996

? 可以看到此時(shí),沖突就產(chǎn)生了 因?yàn)殡娔X并不知道 你想要保留哪一份 index.html 文件(home.html沒(méi)有沖突) 庐舟,于是欣除,彈出對(duì)話框,讓用戶進(jìn)行選擇挪略。

? 所以沖突具有以下特點(diǎn)

  • 在文件進(jìn)行合并時(shí)容易產(chǎn)生
  • 沖突的解決方法历帚,只能是用戶決定

1.21. 分支合并時(shí)的沖突

? 剛才的演示,是人為手動(dòng)操作導(dǎo)致的杠娱。當(dāng)我們使用分支挽牢,進(jìn)行合并的時(shí)候,也會(huì)出現(xiàn)沖突摊求,只不過(guò)這次沖突的 提示框解決方法 都是通過(guò) 命令行來(lái)體現(xiàn)的禽拔。

1.21.1. 初始化倉(cāng)庫(kù)

  1. 新建一個(gè)文件夾 沖突的演示
  2. 初始化 git 倉(cāng)庫(kù) git init
  3. 新建文件 index.html
  4. 添加到暫存區(qū)
  5. 提交到本地倉(cāng)庫(kù)
1526002222651
1526002222651

?

1.21.2. 開(kāi)啟 分支 dev

? 初始化完倉(cāng)庫(kù)之后,開(kāi)啟分支dev室叉,此時(shí) 分支dev 的內(nèi)容和主分支master 是一模一樣的

git branch dev

?
1526002370112
1526002370112
1526002472933
1526002472933

? 在分支master下睹栖,

  1. 編輯 index.html 輸入 主分支master下的編輯
  2. 添加到暫存區(qū) git add *
  3. 提交到本地倉(cāng)庫(kù) git commit -m "master下修改了index.html"
1526002990206
1526002990206

? 切換到 分支 dev下

  1. 切換分支 git checkout dev

    1526003304232
    1526003304232
  2. 編輯 index.html 輸入 分支dev下的編輯

  3. 添加到暫存區(qū) git add *

  4. 提交到本地倉(cāng)庫(kù) git commit -m "dev下修改了index.html"

1526003463186
1526003463186

完成了以上操作之后,主分支master和 分支dev 下的index.html 分別是

1526003571578
1526003571578

1.21.3. 合并沖突分支以及解決

此時(shí)準(zhǔn)備分支合并茧痕,

  1. 切換回主分支 git checkout master

  2. 執(zhí)行合并 git merge dev 彈出提示 文件合并產(chǎn)生沖突了

    1526003800813
    1526003800813
  3. 此時(shí)野来,手動(dòng)解決沖突,打開(kāi) index.html 文件 發(fā)現(xiàn)

    1526004039990
    1526004039990
  4. 添加到暫存區(qū)

  5. 提交到本地倉(cāng)庫(kù)

    1526004176375
    1526004176375

至此踪旷,沖突的產(chǎn)生以及解決曼氛,演示完畢豁辉。 強(qiáng)烈建議 自行多練習(xí)該步驟,了解每一步的含義舀患。

1.22. 常用git命令

注解 命令
git reset HEAD XXX 從暫存區(qū)移出
git diff 查看編輯過(guò)的文件和 版本庫(kù)的區(qū)別
git config user.name xxx 配置當(dāng)前倉(cāng)庫(kù)的用戶名
git config user.email xxx 配置當(dāng)前倉(cāng)庫(kù)的郵箱
git init 初始化 git 倉(cāng)庫(kù)
git add xxx 添加到暫存區(qū)
git commit -m "備注" 提交到本地倉(cāng)庫(kù)
git commit -m "備注" -a git add 和 git commit 的綜合
git remote -v 查看遠(yuǎn)程倉(cāng)庫(kù)地址
git remote add 遠(yuǎn)程倉(cāng)庫(kù)名 遠(yuǎn)程倉(cāng)庫(kù)地址 添加遠(yuǎn)程倉(cāng)庫(kù)地址
git remote rm 遠(yuǎn)程倉(cāng)庫(kù)名 刪除遠(yuǎn)程倉(cāng)庫(kù)
git remote set-url 遠(yuǎn)程倉(cāng)庫(kù)名 遠(yuǎn)程倉(cāng)庫(kù)地址 修改遠(yuǎn)程倉(cāng)庫(kù)地址
git push 遠(yuǎn)程倉(cāng)庫(kù)地址 master 提交到遠(yuǎn)程倉(cāng)庫(kù)
git push 遠(yuǎn)程倉(cāng)庫(kù)地址 master -u 提交到遠(yuǎn)程倉(cāng)庫(kù) (以后 git push 即可)
git clone 遠(yuǎn)程倉(cāng)庫(kù)地址 克隆倉(cāng)庫(kù)
git pull 拉取更新
ssh-keygen -t rsa -C "郵箱地址" 生成 ssh證書(shū)
cat ~/.ssh/id_rsa.pub 查看ssh證書(shū)
git reset --hard "commit Id" 還原到某版本
git reset --hared HEAD^ 還原到上一個(gè)版本
git log 查看版本歷史
git reflog 查看更強(qiáng)大的版本歷史
git checkout 文件名 還原文件到上一個(gè)版本
git branch 分支名 創(chuàng)建分支
git checkout 分支名 切換到分支
git merge 分支名 合并分支
git branch 查看分支
git branch -d 分支名 刪除分支

1.23. 擴(kuò)展閱讀

Pro Git

猴子都能看懂的git

十分鐘掌握bash 命令

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徽级,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子聊浅,更是在濱河造成了極大的恐慌餐抢,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狗超,死亡現(xiàn)場(chǎng)離奇詭異弹澎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)努咐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門苦蒿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人渗稍,你說(shuō)我怎么就攤上這事佩迟。” “怎么了竿屹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵报强,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拱燃,道長(zhǎng)秉溉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任碗誉,我火速辦了婚禮召嘶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哮缺。我一直安慰自己弄跌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布尝苇。 她就那樣靜靜地躺著铛只,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糠溜。 梳的紋絲不亂的頭發(fā)上淳玩,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音非竿,去河邊找鬼凯肋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛汽馋,可吹牛的內(nèi)容都是我干的侮东。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豹芯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悄雅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铁蹈,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宽闲,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后握牧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體容诬,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年沿腰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了览徒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颂龙,死狀恐怖习蓬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情措嵌,我是刑警寧澤躲叼,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站企巢,受9級(jí)特大地震影響枫慷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浪规,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一或听、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罗丰,春花似錦神帅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至绍填,卻和暖如春霎桅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讨永。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工滔驶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卿闹。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓揭糕,卻偏偏與公主長(zhǎng)得像萝快,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子著角,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照揪漩,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái)吏口,任何一處協(xié)同...
    __silhouette閱讀 15,899評(píng)論 5 147
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/奄容。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,537評(píng)論 0 13
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照产徊,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 3,929評(píng)論 0 11
  • HERMES舟铜,在新天地這種地方淘到的戈盈。450元,像WOC深滚,喜歡薄薄的舊舊的感覺(jué)奕谭,所以有瑕疵也沒(méi)講價(jià)。話說(shuō)痴荐,我不愛(ài)也...
    拓人86閱讀 134評(píng)論 0 0
  • 01 前兩天和朋友聊起我遇到的一個(gè)情商有點(diǎn)低的人生兆,我提了一句:“因?yàn)樗臀沂且粋€(gè)地方的难捌,所以哪怕不喜歡我也想先試試...
    桃宜閱讀 754評(píng)論 23 16