新猿0基礎(chǔ)python教程 重學(xué)Git

看著標(biāo)題很多的同學(xué)相信都會有疑問恩袱,為了要重學(xué)Git恰矩,之前難道學(xué)習(xí)的正確,沒錯憎蛤,如果不是正確的學(xué)習(xí)Git后面遇到的問題就會很棘手外傅,不知道如何去解決,就不能更好的運用Git俩檬,下面跟著老劉一起來重新學(xué)習(xí)Git吧萎胰!

## 1 Git介紹

```python

# Git的作用

1 對文件(代碼)進(jìn)行版本管理

2 完成 協(xié)同開發(fā) 項目,幫助程序員整合代碼

????i)幫助開發(fā)者合并開發(fā)的代碼

????ii)如果出現(xiàn)沖突代碼的合并,會提示后提交合并代碼的開發(fā)者联逻,讓其解決沖突

# Git簡介

Git是分布式版本控制系統(tǒng),控制的對象是開發(fā)的項目代碼

# 舉例

比如你在寫畢業(yè)論文换可,想刪除一個段落译荞,又怕將來想恢復(fù)找不回來怎么辦?

于是你先把當(dāng)前文件另存為一個新的文件叶骨,再接著改今膊,改到一定程度,再另存為成另一個新文件衡便,這樣一直改下去,最后你的文件變成了:

????-畢業(yè)論文1.doc

??-畢業(yè)論文2.doc

??-畢業(yè)論文3.doc

??-畢業(yè)論文-永不修改版.doc

??-畢業(yè)論文-打死不改版.doc

??-畢業(yè)論文-再改去死版.doc


過了一段時間,你想找回被刪除的文字耀销,但是已經(jīng)記不清刪除前保存在哪個文件里了,只好一個一個文件去找

看著一堆亂七八糟的文件创南,想保留最新的一個,然后把其他的刪掉亦镶,又怕哪天會用上,還不敢刪

```

## 2 Git 和SVN

![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggqvsye2khj30kj0a6mx3.jpg)

![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggqvt8t61hj30m10da3yk.jpg)

**Git:分布式,無網(wǎng)絡(luò)時也可以提交到本地版本庫,待到有網(wǎng)絡(luò)時再push到服務(wù)器. **

**svn:非分布式.無網(wǎng)絡(luò)不可以提交**

## 3 Git,GitHub,GitLab,Gitee

```python

Git:是一種版本控制系統(tǒng)笋鄙,是一個命令,是一種工具。

GitHub:是一個基于Git實現(xiàn)的在線代碼托管倉庫解阅,包含一個網(wǎng)站界面分别,向互聯(lián)網(wǎng)開放曲管,公有倉庫免費场斑,部分私有倉庫收費,全球最大的開源代碼托管平臺

GitLab:是一個基于Git實現(xiàn)的在線代碼倉庫托管軟件浩村,可以通過GitLab自己搭建一個類似于GitHub一樣的系統(tǒng)之众,用在企業(yè)內(nèi)部網(wǎng)絡(luò)搭建Git私服脊岳,用于企業(yè)團(tuán)隊內(nèi)部協(xié)作開發(fā)

Gitee:(碼云) 是 OSCHINA 推出的代碼托管平臺,支持 Git 和 SVN,提供免費的私有倉庫托管,面向互聯(lián)網(wǎng)開發(fā)卵惦,分收費和付費,中國最大的開源代碼托管平臺

```

## 4 Git工作流程

![未命名文件 (1)](https://tva1.sinaimg.cn/large/008i3skNgy1guqseyffpoj60x40eqmyu02.jpg)

## 5 Git使用

### 5.1 流程(核心總結(jié))

```python

"""

1)有紅色信息(工作區(qū)有內(nèi)容)播揪,就執(zhí)行 add?

2)全綠信息(內(nèi)容全部在暫存區(qū))米辐,才執(zhí)行 commit

3)只有被版本庫控制的代碼腹侣,才能被監(jiān)聽,所以可以回滾到任何一個版本

"""

```

### 5.2 安裝

```python

# 1.下載對應(yīng)版本:https://git-scm.com/download

# 2.安裝git:在選取安裝路徑的下一步選取 Use a TrueType font in all console windows 選項

```

### 5.3 基礎(chǔ)命令

#### 將已有的文件夾 - 初始化為git倉庫

```python

"""

>: cd 目標(biāo)文件夾內(nèi)部

>: git init

"""

```

#### 在指定目錄下 - 初始化git倉庫

```python

"""

>: cd 目標(biāo)目錄

>: git init 倉庫名

"""

```

#### 在倉庫目錄終端下 - 設(shè)置全局用戶

```python

"""

>: git config --global user.name '用戶名'

>: git config --global user.email '用戶郵箱'

注:在全局文件 C:\Users\用戶文件夾\.gitconfig新建用戶信息,在所有倉庫下都可以使用

"""

```

#### 在倉庫目錄終端下 - 設(shè)置局部用戶

```python

"""

>: git config user.name '用戶名'

????-- 用戶名

>: git config user.email '用戶郵箱'

????-- 用戶郵箱


注:在當(dāng)前倉庫下的config新建用戶信息惨篱,只能在當(dāng)前倉庫下使用

注:一個倉庫有局部用戶烈钞,優(yōu)先使用局部用戶,沒有配置再找全局用戶

"""

```

#### 查看倉庫狀態(tài)

```python

"""

# 當(dāng)倉庫中有文件增加窘奏、刪除嘹锁、修改,都可以在倉庫狀態(tài)中查看

>: git status??

????-- 查看倉庫狀態(tài)

>: git status -s??

????-- 查看倉庫狀態(tài)的簡約顯示

"""

```

#### 工作區(qū)操作

```python

# 通過任何方式完成的文件刪與改

# 空文件夾不會被git記錄

```

#### 撤銷工作區(qū)操作:改着裹、刪(了解)

```python

"""

>: git checkout .

????-- 撤銷所有暫存區(qū)的提交

>: git checkout 文件名

????-- 撤銷某一文件的暫存區(qū)提交

"""

```

#### 工作區(qū)內(nèi)容提交到暫存區(qū)

```python

"""

>: git add .??

????-- 添加項目中所有文件

>: git add 文件名??

????-- 添加指定文件

"""

```

#### 撤銷暫存區(qū)提交:add的逆運算(很少使用)

```python

"""

>: git reset HEAD .

????-- 撤銷所有暫存區(qū)的提交

>: git reset 文件名

????-- 撤銷某一文件的暫存區(qū)提交

>: git reset .

????-- 撤銷所有暫存區(qū)的提交

"""

```

#### 提交暫存區(qū)內(nèi)容到版本庫

```python

>: git commit -m "版本描述信息"

```

#### 撤銷版本庫提交:commit的逆運算

```python

"""

回滾暫存區(qū)已經(jīng)提交到版本庫的操作:

????查看歷史版本:

????????>: git log

????????>: git reflog

????查看時間點之前|之后的日志:

????????>: git log --after 2018-6-1

????????>: git log --before 2018-6-1

????????>: git reflog --after 2018-6-1

????????>: git reflog --before 2018-6-1

????查看指定開發(fā)者日志

????????>: git log --author author_name

????????>: git reflog --author author_name

????回滾到指定版本:

????????回滾到上一個版本:

????????????>: git reset --hard HEAD^

????????????>: git reset --hard HEAD~

????????回滾到上三個版本:

????????????>: git reset --hard HEAD^^^

????????????>: git reset --hard HEAD~3

????????回滾到指定版本號的版本:

????????????>: git reset --hard 版本號 (重點)

????????????>: eg: git reset --hard 35cb292

"""

```

#### 擴展閱讀

```python

# git log 和git reflog的區(qū)別

git log 命令可以顯示所有提交過的版本信息

如果感覺太繁瑣领猾,可以加上參數(shù)??--pretty=oneline,只會顯示版本號和提交時的備注信息

git reflog 可以查看所有分支的所有操作記錄(包括已經(jīng)被刪除的 commit 記錄和 reset 的操作)

# git reset --hard骇扇,--mix摔竿,--soft的區(qū)別

hard (硬)-> 全部刪除,會徹底返回到回退前的版本狀態(tài),了無痕跡

mixed (中)-> 保留工作目錄,文件回退到未commit的狀態(tài)

soft (軟)-> 保留工作目錄匠题、暫存區(qū) ,文件會回退到未 add(未到暫存)的狀態(tài)

總結(jié):

soft是撤銷commit的提交拯坟,但工作區(qū)未提交的更改還是保留;

mixed是撤銷暫存區(qū)的提交韭山,工作區(qū)的更改同樣也保留;

而hard是把工作區(qū)冷溃、暫存區(qū)钱磅、commit到倉庫的三個版本都回滾了

```

## 6 Git忽略文件

Git工作目錄中,有些文件必須要有似枕,但又不能提交它們盖淡,就可以設(shè)置忽略文件

在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的`.gitignore`文件,然后把要忽略的文件名放進(jìn)去凿歼,Git就會自動忽略這些文件

```python

# .gitignore 文件

# 1)在倉庫根目錄下創(chuàng)建該文件

# 2)文件與文件夾均可以被過濾

# 3)文件過濾語法

""" 過濾文件內(nèi)容

文件或文件夾名:代表所有目錄下的同名文件或文件夾都被過濾

/文件或文件夾名:代表倉庫根目錄下的文件或文件夾被過濾

例如:

a.txt:項目中所有a.txt文件和文件夾都會被過濾

/a.txt:項目中只有根目錄下a.txt文件和文件夾會被過濾

/b/a.txt:項目中只有根目錄下的b文件夾下的a.txt文件和文件夾會被過濾

*x*:名字中有一個x的都會被過濾(*代表0~n個任意字符)

空文件夾不會被提交褪迟,空包會被提交,包可以被提交(包中有一個init空文件)

注意:

# 以'#'開始的行答憔,被視為注釋.??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

# 忽略掉所有文件名是 lqz.txt的文件.

????lqz.txt

# 忽略所有生成的 html文件,

*.html

# lqz.html是例外味赃,不在忽略范圍內(nèi)

!lqz.html

# 忽略所有.o和 .a文件.

*.[oa]

"""

```

## 7 Git分支

### 7.1 基本使用

```python

"""

1.創(chuàng)建分支

git branch 分支名

2.查看分支

git branch

3.切換分支

git checkout 分支名

4.創(chuàng)建并切換到分支

git checkout -b 分支名

5.刪除分支

git branch -d 分支名

6.查看遠(yuǎn)程分支(列出所有分支,包含遠(yuǎn)程)

git branch -a

7.合并分支

git merge 分支名

把dev分支合并到master分支:切換到master分支虐拓,執(zhí)行合并dev分支的命令

8.刪除遠(yuǎn)程分支

git push origin --delete lqz

9.新建遠(yuǎn)程分支

本地lqz分支建立完成

git push origin lqz?

"""

"""

1)多個開發(fā)者都是在一個分支上進(jìn)行開發(fā)心俗,不出意外,該分支一定叫dev(協(xié)同開發(fā))

2)如果出現(xiàn)一個特殊任務(wù)(敏感任務(wù))蓉驹,與正常業(yè)務(wù)關(guān)系不緊密城榛,甚至可能大的影響正常的dev分支開發(fā),可以依賴dev開一個子分支态兴,進(jìn)行開發(fā)狠持,開發(fā)完畢后合并到dev分支,再刪除該分支即可

3)所有的開發(fā)任務(wù)都可以在dev分支上進(jìn)行(除非公司硬性要求不能直接在dev分支開發(fā)瞻润,只能在dev子分支開發(fā)喘垂,測試通過后才能合并給dev)

"""

```

### 7.2 dev分支合并到master分支

![未命名文件 (2)](https://tva1.sinaimg.cn/large/008i3skNgy1guqz5c5882j60p107w0t002.jpg)

### 7.3 基于分支的線上bug修復(fù)(開發(fā)新功能甜刻,出現(xiàn)bug)

![未命名文件 (3)](https://tva1.sinaimg.cn/large/008i3skNgy1guqztf0lfvj60s70aqjry02.jpg)

```python

# 無沖突情況

git branch dev # 創(chuàng)建dev分支

git checkout dev # 切換到dev分支

vi d3.txt???????# 新增d3.txt

git add .

git commit -m 'd3.txt' # 提交到版本庫

git checkout master????# 切換到master分支

git branch bug?????????# 創(chuàng)建bug分支

git checkout bug???????# 切換到bug分支

vi b4.txt??????????????# 在bug分支,新增b4.txt??

git add .

git commit -m 'b4.txt'

git checkout master????# 切換回master分支

git merge bug??????????# 合并bug分支

git log

git merge dev??????????# 合并dev分支王污,無沖突罢吃,寫注釋

git log

```

```python

git branch -d dev

git branch -d bug

# 有沖突情況

git branch dev # 創(chuàng)建dev分支

git checkout dev # 切換到dev分支

vi d4.txt???????# 新增d4.txt

git add .

git commit -m 'd4.txt' # 提交到版本庫

git checkout master????# 切換到master分支

git branch bug?????????# 創(chuàng)建bug分支

git checkout bug???????# 切換到bug分支

vi b4.txt??????????????# 在bug分支,新增b4.txt??

git add .

git commit -m 'd4.txt'

git checkout master????# 切換回master分支

git merge bug??????????# 合并bug分支

git log

git merge dev??????????# 合并dev分支昭齐,出沖突

'''

CONFLICT (add/add): Merge conflict in d4.txt

Auto-merging d4.txt

Automatic merge failed; fix conflicts and then commit the result.

'''

# 打開d4.txt發(fā)現(xiàn)如下錯誤

<<<<<<< HEAD????# 原來代碼

bug-add-d4

=======?????????# 新代碼

sada

>>>>>>> dev

#??手動修復(fù)尿招,解決沖突,再提交

git add .

git commit -m '解決沖突'

git log

```

## 8 Git遠(yuǎn)程倉庫

**我們要協(xié)同開發(fā)阱驾,代碼要提交到遠(yuǎn)程倉庫就谜,可以使用gitee,github里覆,gitlab丧荐,本文以gitee為例**

### 8.1 創(chuàng)建遠(yuǎn)程倉庫

```python

# 首先注冊gitee賬號,登陸后喧枷,創(chuàng)建倉庫

```

**注意:git push -u origin master 中-u的意思是虹统,只要執(zhí)行一遍這個命令,以后執(zhí)行g(shù)it push 就等同于git push origin maste隧甚,所有-u表示設(shè)置一個默認(rèn) **

### 8.2 remote源操作

```python

"""

1)查看倉庫已配置的遠(yuǎn)程源

>: git remote

>: git remote -v

2)查看remote命令幫助文檔

>: git remote -h

3)刪除遠(yuǎn)程源

>: git remote remove 源名

eg: git remote remove origin

4)添加遠(yuǎn)程源

>: git remote add 源名 源地址

>: git remote add orgin https://gitee.com/liuqingzheng/app01.git

5)提交代碼到遠(yuǎn)程源

>: git push 源碼 分支名

6)克隆遠(yuǎn)程源

>: git clone 遠(yuǎn)程源地址

"""

"""

1)通過克隆方式連接遠(yuǎn)程源车荔,默認(rèn)遠(yuǎn)程源名就叫origin;所以主動添加遠(yuǎn)程源來連接遠(yuǎn)程倉庫戚扳,源碼也用origin

2)本地一個倉庫只需要和遠(yuǎn)程一個源進(jìn)行同步忧便,所以只需要連接一個遠(yuǎn)程源,如果還想把本地代碼同步給第三個平臺帽借,那么可以通過主動添加遠(yuǎn)程源來連接第三個平臺的遠(yuǎn)程倉庫珠增,此時的源碼就不能再叫origin了,比如online都可以

3)pull和push都可以提供選擇不同的源碼砍艾,和不同的遠(yuǎn)程倉庫交互

"""

```

### 8.3 采用ssh協(xié)議連接遠(yuǎn)程源

```python

# 生成公鑰私鑰蒂教,幫助文檔

官網(wǎng):https://gitee.com/help/articles/4181#article-header0

# 在命令行下執(zhí)行命令

ssh-keygen -t rsa -C "306334678@qq.com" # 郵箱可以任意填寫

# 生成的公鑰私鑰,會放在用戶家路徑下的.ssh文件夾下

本機命令辐董,查看公鑰:cat ~/.ssh/id_rsa.pub

# 復(fù)制公鑰悴品,粘貼到gitee上配置

????-項目倉庫 => 管理 => 部署公鑰管理 => 添加公鑰 => 添加個人公鑰


# 把原來的 origin刪除,新增ssh源

git remote remove orgin

git remote add orgin git@gitee.com:liuqingzheng/app01.git


# 配置成功后简烘,再拉取和提交代碼苔严,不需要輸入用戶名密碼認(rèn)證了

```

### 8.4 如何成為其他碼云項目的開發(fā)者

```python

如果公司項目已經(jīng)存在,同事新入職孤澎,基于原項目開發(fā)

"""

1)生成自己電腦的公鑰届氢,配置到自己的碼云個人公鑰中

2)把自己的碼云用戶名提供給別人,別人添加你成為項目開發(fā)者

3)自己確認(rèn)添加覆旭,成為開發(fā)者退子,克隆開發(fā)項目岖妄,進(jìn)行開發(fā)

"""

```

### 8.5 協(xié)同開發(fā)

```python

"""

1)作為開發(fā)者,第一次同步項目

>: git clone 項目地址

2)保證自己本地有dev分支寂祥,且與遠(yuǎn)程倉庫版本同步(沒有就自己新建)

3)本地開發(fā)的代碼荐虐,必須add、commit到本地版本庫后丸凭,才和遠(yuǎn)程倉庫進(jìn)行交互

4)交互順序:必須 先拉(pull)后提(push)

5)必須切換到要交互的分支福扬,在與遠(yuǎn)程同名的分支進(jìn)行交互,如本地dev與遠(yuǎn)程dev交互

>: git checkout dev

>: git add .

>: git commit -m '本次提交的信息提示'

>: git pull origin dev

>: git push origin dev

"""

```

### 8.6 線上分支合并(提交pr)

#### 無沖突情況

```python

# 本地創(chuàng)建分支

git branch dev

# 把本地分支提交到遠(yuǎn)程

git push??origin dev

# 在本地dev分支修改代碼

git checkout dev

vi d5.txt

git add .

git commit -m '新增d5'

# 推送到遠(yuǎn)程

git push??origin dev

```

![image-20210924002401179](https://tva1.sinaimg.cn/large/008i3skNgy1gur0wjexf0j61wa0eodi902.jpg)

![image-20210924002620931](https://tva1.sinaimg.cn/large/008i3skNgy1gur0yzez7aj61e60u041l02.jpg)

![image-20210924003103078](https://tva1.sinaimg.cn/large/008i3skNgy1gur13ujqipj61i80u0adt02.jpg)

#### 有沖突情況

```python

git pull origin master??# 主分支拉取最新

vi d5.txt

git add .

git commit -m '修改d5.txt'

git push??origin master??# 主分支修改一行惜犀,提交到遠(yuǎn)程

git checkout dev??# 切換到dev分支

?vim d5.txt

git add .

git commit -m 'dev修改d5.txt'

git push??origin dev????# 修改同一行铛碑,提交到遠(yuǎn)程,注意同一行內(nèi)容不能一致

## 線上提交pr虽界,線上不能自動合并汽烦,需要手動合并

git checkout master

git pull https://gitee.com/liuqingzheng/app01.git dev

# 手動修改沖突

git add .

git commit -m '合并pr'

git push origin master

# 再去線上,看到分支已經(jīng)合并好了

```

### 8.7 遠(yuǎn)程倉庫回滾

```python

"""

用dev分支舉例

1)本地切換到遠(yuǎn)程要回滾的分支對應(yīng)的本地分支

git checkout dev

2)回滾本地分支

git reset --hard 版本號

3)本地版本強行提交給服務(wù)器

git push origin dev -f

"""

```

## 9 沖突解決

### 9.1 多人開發(fā)同一分支導(dǎo)致沖突

```python

"""

1)在遠(yuǎn)程倉庫和本地倉庫版本不一致時莉御,拉取遠(yuǎn)程倉庫版本到本地時撇吞,兩個版本進(jìn)入融合,可能會出現(xiàn)版本沖突

2)定位沖突文件沖突代碼礁叔,線下溝通沖突代碼梢夯,整合代碼解決沖突

3)將解決沖突后的代碼重新提交到本地版本庫

4)再拉去遠(yuǎn)程倉庫,直到?jīng)]有沖突晴圾,提交本地版本庫到遠(yuǎn)程

"""

"""

<<<<<<< HEAD??# 沖突的開始

# 自己的代碼

=======??# 分割線

# 別人的代碼

>>>>>>> b63c408abd05b87fc492d40523240561999dba50??# 沖突的結(jié)束(版本)

"""

"""

1)刪除沖突相關(guān)標(biāo)識:沖突的開始、分割線噪奄、沖突的結(jié)束(版本)

2)線下溝通死姚,根據(jù)實際需求完成代碼整合

3)測試整合后的代碼

"""

"""

出現(xiàn)沖突的前提:

1)不同開發(fā)者同時操作了同一文件

2)并且在相同行寫了代碼

強調(diào):有業(yè)務(wù)交際時,版本合并不一定會出現(xiàn)沖突相關(guān)的標(biāo)識勤篮,但是可能會帶著代碼運行崩潰都毒,所有理論上每一次版本合并,都要測試合并后的所有功能(及其之少的情況)

"""

```

### 9.2 分支合并導(dǎo)致沖突

```python

分支合并出現(xiàn)沖突效果跟上面一樣碰缔,只需要解決沖突账劲,重新提交即可

"""

<<<<<<< HEAD??# 沖突的開始

# 自己的代碼

=======??# 分割線

# 別人的代碼

>>>>>>> dev??# 沖突的分支

"""

```

## 10 同一個人在公司開發(fā)和在家開發(fā)

### 10.1 正常情況

```python

# 公司電腦,有代碼

git branch lqz

git checkout lqz # 創(chuàng)建一個自己的分支金抡,寫代碼

vi new.txt

git add .

git commit -m '公司開發(fā)了'

git push origin lqz

# 家里電腦瀑焦,沒有代碼,需要先克隆

cd Desktop/proj

git clone https://gitee.com/liuqingzheng/app01.git

cd app01

git pull origin lqz #拉取lqz分支內(nèi)容

git checkout lqz????# 切換到lqz分支

# 基于此繼續(xù)開發(fā)梗肝,公司開發(fā)的代碼也拉下來了榛瓮,寫完記得提交到遠(yuǎn)程

# 到了公司只需要再pull一下即可把家中開發(fā)的開發(fā)同步過來

```

### 10.2 公司忘記提交代碼情況

```python

# 忽然有一天,在公司開發(fā)了代碼巫击,沒有提交到遠(yuǎn)程倉庫

# 回家就沒法拉取最新公司開發(fā)的代碼禀晓,只能基于遠(yuǎn)程倉庫最新代碼繼續(xù)開發(fā)其他功能(跟公司開發(fā)的功能不一樣)

# 在家中開發(fā)完成提交到遠(yuǎn)程

# 第二條天到公司精续,拉取遠(yuǎn)程最新代碼(可能有沖突)

```

## 11 Git標(biāo)簽管理

```python

# 1 打tag

git tag -a "v1.0" -m "new tag v1.0"

# 2 推送tag到遠(yuǎn)程

git push origin v1.0

# 3 可以看到遠(yuǎn)程有tag了

# 4 基于其他位置打log

git reflog # 查看日志id

# 5 打tag

git tag -a "v1.1" id號 -m 'test'

# 6 推送tag到遠(yuǎn)程

git push origin v1.1

```

## 12 為開源項目貢獻(xiàn)代碼

```python

# 第一步:fork開源代碼,fork后粹懒,在你的個人倉庫里就可以看到這個開源代碼了(相當(dāng)于copy了一份)

# 第二步:在自己倉庫進(jìn)行修改

修改代碼重付,提交暫存,提交到版本庫凫乖,提交到自己gitee

# 第三步:給開源作者提交pr

# 第四步:開源軟件作者就會收到pr确垫,他選擇是否合并,合并后拣凹,你就成了開源軟件開發(fā)者

```

![image-20210924011328551](https://tva1.sinaimg.cn/large/008i3skNgy1gur2bzmed2j61lq0u043002.jpg)

## 13 變基操作(rebase)

**讓提交記錄變得更加簡潔**

### 13.1 第一森爽,多個記錄整合成一個記錄

![未命名文件 (5)](https://tva1.sinaimg.cn/large/008i3skNgy1gur3uhyglyj60np08eaag02.jpg)

```python

git branch lqz??# 創(chuàng)建分支lqz

git checkout lqz # 切換到分支lqz

vi lqz.txt???????

git add .

git commit -m '增加lqz.txt' # 新增lqz.txt 并提交

vi lqz1.txt

git add .

git commit -m '增加lqz1.txt' # 新增lqz1.txt 并提交

vi lqz2.txt

git add .

git commit -m '增加lqz2.txt' # 新增lqz2.txt 并提交

git log???# 查看版本日志

# 指定合并從當(dāng)前版本開始往前的哪個版本(不包含)

git rebase -i 8fa035cd6805e8b35ccb9ceee9a9710c9b819b3c

# 把第二行開始,改為s

# 加入注釋嚣镜,合并后的注釋

git log # 只能看到合并后的注釋了爬迟,多次更改變成了一次

# 注意:已經(jīng)提交到遠(yuǎn)程倉庫的版本,不要再使用rebase菊匿,只合并本地版本提交的幾率

```

### 13.2第二,解決分支合并分叉問題

![未命名文件 (6)](https://tva1.sinaimg.cn/large/008i3skNgy1gur4jas2zoj61150d0dgj02.jpg)

```python

#### 正常merge合并

git branch dev

git checkout dev

vi dev.txt

git add .

git commit -m 'dev增加dev.txt'

git checkout master

vi master.txt

git add .

git commit -m 'master增加master.txt'

# 使用merge合并

git merge dev # 寫入注釋合并

# 圖形化查看版本情況

git log --graph

##### 使用rebase合并

git branch -d dev # 刪除dev分支

git branch dev

git checkout dev # 新建付呕,切換到dev分支

vi dev1.txt

git add .?

git commit -m 'dev 增加dev1.txt' # 新建dev1.txt 并提交到版本庫

git checkout master

vi master1.txt

git add .

git commit -m 'master增加master1.txt' # 切換到master,新建master1.txt跌捆,并提交到版本庫

git checkout dev

git rebase master??# 切換到dev分支徽职,完成變基

git checkout master

git merge dev?????# 切換到master,完成合并

git log --graph???# 查看佩厚,變成了一條線

```

![image-20210924023612523](https://tva1.sinaimg.cn/large/008i3skNgy1gur4q25eflj617e0kw41r02.jpg)

#### rebase合并出沖突情況解決

```python

git branch -d dev # 刪除dev分支

git branch dev

git checkout dev # 新建姆钉,切換到dev分支

vi lqz.txt???????# 在內(nèi)部增加一行話

git add .?

git commit -m 'dev 增加lqz.txt' # 新建lqz.txt 并提交到版本庫

git checkout master

vi lqz.txt

git add .??????# 在內(nèi)部也增加一行話

git commit -m 'master增加lqz.txt' # 切換到master,新建lqz.txt抄瓦,并提交到版本庫

git checkout dev

git rebase master??# 切換到dev分支潮瓶,完成變基,出現(xiàn)沖突

# 解決沖突

vi lqz.txt??# 把沖突解決掉

# 查看狀態(tài)

git status # git rebase正在進(jìn)行狀態(tài)

# 繼續(xù)往下走

git add .

git rebase --continue

git checkout master

git merge dev?????# 切換到master钙姊,完成合并

git log --graph???# 查看毯辅,變成了一條線

git rebase --continue

```

### 13.3 第三

```python

git branch -d dev

git branch dev

git checkout dev # 刪掉dev,重新創(chuàng)建煞额,并切換到dev分支

git push origin dev # 把本地dev同步到遠(yuǎn)程

vi gs.txt

git add .

git commit -m '公司寫了代碼思恐,提交到本地'??# 忘了提交到遠(yuǎn)程倉庫

# 回家后,繼續(xù)開發(fā)膊毁,從遠(yuǎn)程拉下來

mkdir pr

cd pr

git clone https://gitee.com/liuqingzheng/app01.git??# 把代碼克隆下來

cd app01

git checkout dev???# 切換到dev分支胀莹,此時是沒有g(shù)s.txt的

vi j.txt???????????# 在家繼續(xù)開發(fā)

git add .

git commit -m '家里寫了代碼'??

git push origin dev??????# 家里寫的代碼提交到遠(yuǎn)程倉庫

# 第二天來到公司,拉取代碼繼續(xù)開發(fā)媚媒,如果直接拉取嗜逻,會分叉

# 不使用git pull 拉取代碼,會分叉

# 先 git fetch 拉取

git fetch origin dev??# 先拿下來缭召,自定合并代碼栈顷,使用merge合并會分叉

# 使用rebase合并

git rebase origin/dev

'''

由原來的 git pull origin dev

變成

git fetch origin dev

git rebase origin/dev

'''

```

![image-20210924030355748](https://tva1.sinaimg.cn/large/008i3skNgy1gur5ix3r35j61160n677j02.jpg)

##?

## 14 git pull 和git fetch

```python

1. 相同點

首先在作用上他們的功能是大致相同的逆日,都是起到了更新代碼的作用。

2. 不同點

git pull 類似于 git fetch+git merge

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萄凤,一起剝皮案震驚了整個濱河市室抽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靡努,老刑警劉巖坪圾,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惑朦,居然都是意外死亡兽泄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門漾月,熙熙樓的掌柜王于貴愁眉苦臉地迎上來病梢,“玉大人,你說我怎么就攤上這事梁肿◎涯埃” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵吩蔑,是天一觀的道長钮热。 經(jīng)常有香客問我,道長烛芬,這世上最難降的妖魔是什么隧期? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赘娄,結(jié)果婚禮上厌秒,老公的妹妹穿的比我還像新娘。我一直安慰自己擅憔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布檐晕。 她就那樣靜靜地躺著暑诸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辟灰。 梳的紋絲不亂的頭發(fā)上个榕,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音芥喇,去河邊找鬼西采。 笑死,一個胖子當(dāng)著我的面吹牛继控,可吹牛的內(nèi)容都是我干的械馆。 我是一名探鬼主播胖眷,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼霹崎!你這毒婦竟也來了珊搀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤尾菇,失蹤者是張志新(化名)和其女友劉穎境析,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體派诬,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡劳淆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了默赂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沛鸵。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖放可,靈堂內(nèi)的尸體忽然破棺而出谒臼,到底是詐尸還是另有隱情,我是刑警寧澤耀里,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布蜈缤,位于F島的核電站,受9級特大地震影響冯挎,放射性物質(zhì)發(fā)生泄漏底哥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一房官、第九天 我趴在偏房一處隱蔽的房頂上張望趾徽。 院中可真熱鬧,春花似錦翰守、人聲如沸孵奶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽了袁。三九已至,卻和暖如春湿颅,著一層夾襖步出監(jiān)牢的瞬間载绿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工油航, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崭庸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像怕享,于是被迫代替她去往敵國和親执赡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

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