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ū)別于核)钧栖,是指“提供使用者使用界面”的軟件(命令解析器)
如
? 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種模式唐含,分別是命令模式浅浮、插入模式、末行模式 每種模式有不同的功能
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)行版本的控制
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)鍵字:
- 分布式
1.5. git 安裝
? Git可以在Linux、Unix里伯、Mac和Windows這幾大平臺(tái)上正常運(yùn)行使用城瞎。
? 安裝成功后(windows下),在系統(tǒng)的任意目錄下 點(diǎn)擊 鼠標(biāo)右鍵 出現(xiàn)以下菜單疾瓮,代表安裝成功脖镀。
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 命令行工具
? 輸入
# 配置 用戶名
git config --global user.name xxx
# 配置 郵箱
git config --global user.email xxx
# 查看用戶名
git config user.name
1.7. git 基礎(chǔ)
? 如 我們想使用 git 對(duì) 該目錄進(jìn)行版本控制
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)修改!
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
? 我們把添加跟蹤的步驟削祈,叫做 添加到 暫存區(qū)
? 輸入 git add *
對(duì)所有文件進(jìn)行跟蹤
git add *
? 此時(shí)翅溺,重新 查看 倉(cāng)庫(kù)狀態(tài)
git status
? 因此,我們可以 隨時(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)
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) 文件版本管理的地方追城。
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)
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
1.9. 刪除文件
? 在git 倉(cāng)庫(kù)中锦针,有時(shí)候刪除一些無(wú)效的文件。以刪除 css/index.css
為例
? 手動(dòng)將該 文件夾整個(gè)刪除 刪除成功 如下
? 查看倉(cāng)庫(kù)狀態(tài)
git status
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 ./
1.9.2. 提交到本地倉(cāng)庫(kù)
? 把該 刪除操作 提交到 本地倉(cāng)庫(kù) 實(shí)現(xiàn) 版本記錄
git commit -m "刪除了css文件夾"
? 查本地倉(cāng)庫(kù)的狀態(tài)
git status
1.10. 忽略文件
? 有時(shí)候,在工作目錄下的某些文件馋吗,是屬于私人的或者是項(xiàng)目運(yùn)行所產(chǎn)生的臨時(shí)文件焕盟,并不需要添加到 版本控制中。 如 新增一個(gè)文件 私人密碼
? 查看git倉(cāng)庫(kù)狀態(tài)
git status
? 此時(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
大部分情況下脚翘,我們也需要將 .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做為最著名的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)
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ù)敬辣。
2 填寫倉(cāng)庫(kù)信息
3 創(chuàng)建成功
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ù)的地址
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
? 開(kāi)始推送
git push -u origin master
//第二次推送的時(shí)候直接使用
git push
? 提示輸入用戶名 ,直接輸入即可 如 itcastWsy
然后按下回車
? 提示輸入密碼

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

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

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

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
? 查看遠(yuǎn)程倉(cāng)庫(kù)

? 那么現(xiàn)在 做為程序員的你 需要把代碼 進(jìn)行更新
? 回到 test
文件夾內(nèi)芭毙,打開(kāi) git bash 命令行

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

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

? 如果想要還原多個(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)

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

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

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

? 如果绿渣,在次狀態(tài)下又想回到 最新的版本 新增了home.html 呢 查看提交信息
git log
? 發(fā)現(xiàn) 完成登錄功能
之后的日志信息 丟失了。

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

? 還原到最新的版本
git reset --hard 5038cc9

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ū)生成成功

輸入命令 打印密鑰
cat ~/.ssh/id_rsa.pub

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

輸入
ssh -T git@github.com
出現(xiàn)以下界面代表成功缸棵。如果失敗舟茶,建議多嘗試幾次。

1.18.2. 將提交方式 HTTPS 改為 SSH
復(fù)制 SSH 地址


git@github.com:itcastWsy/test.git
修改 origin 地址
因?yàn)橹耙呀?jīng)將 地址 存入 origin 變量了 堵第。查看 origin
git remote -v

此時(shí),將origin的地址 改為 ssh 地址即可
git remote set-url origin git@github.com:itcastWsy/test.git
重新查看 git remote -v
發(fā)現(xiàn)修改成功

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

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í)分支,我們需要從需求入手

? 流程解釋:
網(wǎng)站發(fā)布了第一個(gè)版本
此時(shí),需要研發(fā)新功能1.1版本
-
開(kāi)啟新的分支
dev
進(jìn)行研發(fā)- 研發(fā)成功忍级,將分支
dev
合并到主分支master
上,發(fā)布新版本1.1 - 研發(fā)失敗,直接刪除分支
dev
即可
經(jīng)過(guò)以上流程,我們可以在毫無(wú)風(fēng)險(xiǎn)的情況下開(kāi)發(fā)新功能,不會(huì)影響到已經(jīng)發(fā)布了的網(wǎng)站伪朽。
- 研發(fā)成功忍级,將分支
1.19.1. 網(wǎng)站發(fā)布0版本
在目下下,新建文件夾 web
轴咱,并在里新建一個(gè)空的文件index.html
提交到本地倉(cāng)庫(kù)

1.19.2. 開(kāi)啟新分支
? 在完成1.0版本發(fā)布后(commit之后),開(kāi)啟新分支 dev(dev為分支名)
git branch dev
? 查看當(dāng)前倉(cāng)庫(kù)下的分支
git branch

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

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"

1.19.5. 合并分支
? 新功能開(kāi)發(fā)完畢,需要將分支dev
的代碼合并到主分支master
上
-
切換回主分支
master
git checkout master
-
合并分支
dev
git merge dev
1528521188063
1.19.6. 刪除分支
既然 分支dev的功能已經(jīng)完成讶舰,我們可以將其刪除鞍盗。
git branch -d dev

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

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

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

? 可以看到此時(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ù)
- 新建一個(gè)文件夾
沖突的演示
- 初始化 git 倉(cāng)庫(kù)
git init
- 新建文件
index.html
- 添加到暫存區(qū)
- 提交到本地倉(cāng)庫(kù)

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

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

? 切換到 分支 dev下
-
切換分支
git checkout dev
1526003304232 編輯 index.html 輸入
分支dev下的編輯
添加到暫存區(qū)
git add *
提交到本地倉(cāng)庫(kù)
git commit -m "dev下修改了index.html"

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

1.21.3. 合并沖突分支以及解決
此時(shí)準(zhǔn)備分支合并茧痕,
切換回主分支
git checkout master
-
執(zhí)行合并
git merge dev
彈出提示 文件合并產(chǎn)生沖突了1526003800813 -
此時(shí)野来,手動(dòng)解決沖突,打開(kāi)
index.html
文件 發(fā)現(xiàn)1526004039990 添加到暫存區(qū)
-
提交到本地倉(cāng)庫(kù)
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 分支名 | 刪除分支 |