git介绍及基本使用

 

文章目录

 

一、版本控制器

完成协同开发项目,帮助程序员整合代码

  • 帮助开发者合并开发的代码,使用git实现版本的控制
  • 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突

版本管理工具

  • SVN 、 GIT(都是同一个人的个人项目)
  • github、gitee(两个采用git版本控制器管理代码的公共平台)
  • gitee:中国的版github(很多公司在用)
  • github:远程仓库,全球最大的开源代码库
  • gitlab:公司自己搭建的远程仓库,公司的代码放在上面

二、git基本介绍

1.简介

什么是git?

  • Git 是一个开源的分布式版本控制器
  • 控制的对象是开发的项目代码

git的特点:

  • 集群化、多分支

2.git与SVN的区别

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
  • **2、Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  • **3、Git 分支和 SVN 的分支不同:**分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
  • **4、Git 没有一个全局的版本号,而 SVN 有:**目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  • **5、Git 的内容完整性要优于 SVN:**Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

git介绍及基本使用_git

git介绍及基本使用_git教程_02

3.git 的工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

git介绍及基本使用_git_03

4.版本库间的通信

git介绍及基本使用_git教程_04

5.git分支管理

git介绍及基本使用_git_05

三、git基本使用

1.工作流程(核心)

  • 工作区:就是你在电脑里能看到的目录。

    如果工作区有内容一般显示为红色,就执行add

  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

    若内容全部在暂存区(显示绿色)才会执行commit

  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

    只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本

git介绍及基本使用_git教程_06

2.安装

打开 git官网,下载git对应操作系统的版本。

git介绍及基本使用_git教程_07

选择版本:

git介绍及基本使用_git教程_08

这里我选择下载**64-bit Git for Windows Setup**

git介绍及基本使用_git_09

双击运行安装

git介绍及基本使用_git_10

选择安装配置信息,然后一直Next默认就好了,如果需要设置就要仔细读一下安装界面上的选项。

git介绍及基本使用_git_11

3.启动git

在任意路径下点右键,有两个程序:

  • Git GUI Here
  • Git Bash Here

git介绍及基本使用_git教程_12

**Git Bash:**Unix与Linux风格的命令行,使用最多,推荐最多

git介绍及基本使用_git教程_13

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

git介绍及基本使用_git_14

四、基础命令

Git 常用的是以下 6 个命令:git clonegit pushgit addgit commitgit checkoutgit pull,下面我们会详细介绍。

git介绍及基本使用_git_15

说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

初始化仓库

mkdir 文件夹 # 创建文件夹
cd 文件夹
git init  #初始化仓库,在当前路径下创建一个.git隐藏文件夹

git介绍及基本使用_git_16

查看版本状态

  • 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
git status  
	--- 查看仓库状态
    	-红色:新建,修改,删除,在工作区没有放到暂存区
        -绿色:放到暂存区,没有提交到版本库
        -没有东西:说明所有变更都被版本管理起来了
        
git status -s  
	--- 查看仓库状态的简约显示

工作区内容提交到暂存区

git add .  
	-- 添加项目中所有文件
git add 文件名  
	-- 添加指定文件

提交暂存区内容到版本库

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

设置用户

设置全局

  • 在家路径新建一个.gitconfig文件,把用户名邮箱写进去
git config --global user.name '用户名'
git config --global user.email '用户邮箱'

注:在全局文件C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用

设置局部

  • 在项目路径的.git文件夹下的config文件中加入了用户名和邮箱
git config user.name '用户名'
git config user.email '用户邮箱'

注意:

  • 在当前仓库下的config新建用户信息,只能在当前仓库下使用

  • 一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

工作区操作

# 通过任何方式完成的文件删与改
# 空文件夹不会被git记录

撤销工作区操作:改、删(了解)

git checkout .
	-- 撤销所有暂存区的提交
git checkout 文件名
	-- 撤销某一文件的暂存区提交

撤销暂存区提交:add的逆运算(很少使用)

git reset HEAD .
	-- 撤销所有暂存区的提交
git reset 文件名
	-- 撤销某一文件的暂存区提交
git reset .
	-- 撤销所有暂存区的提交

撤销版本库提交:commit的逆运算

"""回滚暂存区已经提交到版本库的操作"""
# 查看版本管理的日志
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

# 查看指定开发者日志
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

五、过滤文件

  • 我们项目中有一些文件,文件夹,不要提交到版本库
在项目根路径新建:.gitignore (win平台)
在文件中写忽略的文件/文件夹
	-直接写文件夹名字或者/文件夹名字,表示忽略这个文件夹
    -# 表示注释
    -直接写文件名,表示忽略该文件
    -* 表示通配符,表示任意数量任意字符  案例:*.log  以.log结尾的都忽略
    -?表示单个字符 ?.log

六、多分支开发

分支基本操作

# 1.创建分支
git branch 分支名	# 绿色的意思是当前所在分支

# 2.查看分支
git branch

# 3.切换分支
git checkout 分支名

# 4.创建并切换到分支
git checkout -b 分支名	

# 5.删除分支
git branch -d 分支名 # 应该切换到其他分支,再删除

# 6.查看远程分支
git branch -a

# 7.合并分支
git merge 分支名
	git checkout master  # 切换到主分支
    git merge dev        #把dev分支合并到主分支
    把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令

七、Git远程开发

  • 远程仓库:github,码云,公司内部(gitlab)

1.两种本地与远程仓库同步

1)你作为项目仓库初始化人员:
	线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push)
	
2)你作为项目后期开发人员:
	远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发

2.remote源操作(远程仓库)

"""
1)查看仓库已配置的远程源
>: git remote
>: git remote -v

2)查看remote命令帮助文档
>: git remote -h

3)删除远程源
>: git remote remove 源名
eg: git remote remove origin

4)添加远程源: 这种操作等同于你给你的远程源地址取了一个别名, 在push 或者 pull 时就可以使用指定的源名表示你的源地址了.
>: git remote add 源名 源地址
>: git remote add orgin git@gitee.com:doctor_owen/luffyapi.git

5)提交代码到远程源
>: git push 源码 分支名

6)克隆远程源
>: git clone 远程源地址
"""

"""
1)通过克隆方式连接远程源,默认远程源名就叫origin;所以主动添加远程源来连接远程仓库,源码也用origin
2)本地一个仓库只需要和远程一个源进行同步,所以只需要连接一个远程源,如果还想把本地代码同步给第三个平台,那么可以通过主动添加远程源来连接第三个平台的远程仓库,此时的源码就不能再叫origin了,比如online都可以
3)pull和push都可以提供选择不同的源码,和不同的远程仓库交互
"""

3.Git远程连接仓库

远程创建仓库(建一个空仓库)

git介绍及基本使用_git教程_17

4.git项目创始者和开发者

储备知识

# 拉
git pull 源名 分支
git feacth 源名 分支  # 和 pull 类似. 用的少

# 推
git push 源名 分支

项目创始者

1 没有项目纯空的
    mkdir test
    cd test
    git init
    touch README.md
    git add README.md
    git commit -m "first commit"
    git remote add origin https://gitee.com/liuqingzheng/test.git
    git push -u origin master
2 项目已经存在,在本地以及操作了(git_test)
	cd git_test
    git remote add origin https://gitee.com/liuqingzheng/test.git
    git push origin master # 本地代码推送到远程
    #    推送 远程仓库名 主分支
3 提交的时候需要输入gitee的用户名和密码
4 提交成功以后,在远程仓库能看到版本变更记录

项目开发者

# 因为是开源的所有人都可以克隆
git clone https://gitee.com/liuqingzheng/test.git
# 修改改代码
	git add .
    git commit -m
    git remote 配置远程仓库(我现在不用配,同一台机器已经配置过了)
    git push origin master
# 在提交代码之前,要先更新
	git pull origin master

七、采用ssh协议连接远程源(公司一般用这种)

1.采用ssh协议连接

1 使用https操作的,第一次提交的时候,输入用户名密码
2 企业里通常使用ssh
	-公钥:配置在gitee
    -私钥:留在你本地
    
3 生成公钥私钥
	-在命令窗口下,位置无所谓执行
    ssh-keygen -t rsa -C "33@qq.com" 
    -会在/c/Users/计算机用户名/.ssh/id_rsa生成公钥私钥
    -公钥给别人,私钥不能泄露(非对称加密:对称加密)
4 在gitee中配置,以后本机操作我这个账号,就不用密码验证了
5 远程仓库改成ssh方法
6 git push origin master

git介绍及基本使用_git教程_18

git介绍及基本使用_git_19

配置公匙到码云

git介绍及基本使用_git教程_20

复制copy配置的私钥链接

git介绍及基本使用_git_21

第五步: 实现ssh建立链接提交

# 提交本地代码到远程仓库
git push origin master

git介绍及基本使用_git_22

八、pycharm操作git

1.pycharm添加git

git介绍及基本使用_git教程_23

2.创建文件将文件自动配置将工作区的内容add到暂存区

git介绍及基本使用_git教程_24

git介绍及基本使用_git教程_25

git介绍及基本使用_git_26

3.提交内容到版本库

git介绍及基本使用_git教程_27

git介绍及基本使用_git_28

git介绍及基本使用_git_29

git介绍及基本使用_git_30

4. 提交时如果没有指定commit+push组合键的情况

git介绍及基本使用_git教程_31

5. 导航栏上面展示的提交图标是提交到本地的版本库

git介绍及基本使用_git_32

6. git克隆操作

git介绍及基本使用_git教程_33

git查看版本库信息

git介绍及基本使用_git教程_34

git介绍及基本使用_git教程_35

7.添加修改远程仓库

git介绍及基本使用_git教程_36

git介绍及基本使用_git_37

8.前版本和主版本做比较

git介绍及基本使用_git教程_38

git介绍及基本使用_git_39

git介绍及基本使用_git_40

9.新建本地分支

git介绍及基本使用_git教程_41

提示: 勾选Checkout branch默认切到当前创建的分支

git介绍及基本使用_git_42

10.切换分支

git介绍及基本使用_git教程_43

11.删除分支

git介绍及基本使用_git_44

git介绍及基本使用_git_45

12.查看历史版本记录

git介绍及基本使用_git教程_46

git介绍及基本使用_git_47

九、git的变基

git rebase

十、协同开发

1.协同开发流程

注意: 最好一个功能作为一次本地的版本库提交.

# 1)作为开发者,第一次同步项目(前台已经是项目开发者了,)
git clone 项目地址

# 2)保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建)

# 3)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互

# 4)交互顺序:必须 先拉(pull)后提(push)

# 5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互
git checkout dev
git add .
git commit -m '本次提交的信息提示'
git pull origin dev
git push origin dev

2.协同开发出现冲突,如何解决

git pull origin master  拉下远程代码,同事和你修改了同一个位置,会冲突,如下:
<<<<<<< HEAD
你的代码
=======
别人代码
>>>>>>> origin/master    


# 处理方案
1. 删除你的代码:你觉得他写的好
2. 删除同事代码:你写的好
3. 合并你们的代码:你俩虽然改了一行,但是功能不一样

git介绍及基本使用_git_48

3.冲突解决

"""
1)在远程仓库和本地仓库版本不一致时,拉取远程仓库版本到本地时,两个版本进入融合,可能会出现版本冲突

2)定位冲突文件冲突代码,线下沟通冲突代码,整合代码解决冲突

3)将解决冲突后的代码重新提交到本地版本库

4)再拉去远程仓库,直到没有冲突,提交本地版本库到远程
"""

"""
<<<<<<< HEAD  # 冲突的开始
# 自己的代码
=======  # 分割线
# 别人的代码
>>>>>>> b63c408abd05b87fc492d40523240561999dba50  # 冲突的结束(版本)
"""

"""
1)删除冲突相关标识:冲突的开始、分割线、冲突的结束(版本)
2)线下沟通,根据实际需求完成代码整合
3)测试整合后的代码

"""

出现冲突的前提:
1)不同开发者同时操作了同一文件
2)并且在相同行写了代码
强调:有业务交际时,版本合并不一定会出现冲突相关的标识,但是可能会带着代码运行崩溃,所有理论上每一次版本合并,都要测试合并后的所有功能(及其之少的情况)
"""

4.分支合并

4.1 线上分支合并

1 在线上新建一个dev1分支
2 拉去到本地
3 在本地dev1分支增加一行代码,提交到版本库
4 在本地dev1分支又增加一行代码,提交到版本库
5 远程分支合并
	-pull request,指定从哪个分支合并到哪个分支
    -绿色表示没有冲突,可以正常合并
    -普通和扁平化(变基)
6 本地、远程的dev1和master就完全一样了

git介绍及基本使用_git_49

git介绍及基本使用_git_50

4.2 线下分支合并提交

1 本地dev1分支新增代码,提交到版本库
2 本地dev1分支合并到master
	-切到master
    -git merge dev1  (没有冲突直接合并)
    -git push origin master (本地master提交到远端master)
3 切到dev1分支,再提交到远端
4 到此,本地分支合并完成,远端的dev1跟master完全一样,本地的dev1跟master也完全一样

5.远端如何创建一个分支

5.1 直接在远端仓库创建

git介绍及基本使用_git教程_51

git介绍及基本使用_git教程_52

5.2 本地创建,提交到远端

git checkout -b dev
git push origin dev

6.分支合并出现冲突解决

6.1 本地分支合并出现冲突

1. dev_bug分支改了文件
2. dev分支改了同样的文件
3. 合并就出冲突
4. git merge dev_bug (在dev分支上操作)
5. 解决冲突(删你的,同事的,合并起来)
6. git add .  git commit 提交到远端
7. 正常了,冲突解决

dev分支新增了内容.

git介绍及基本使用_git教程_53

dev_bug分支新增的内容和dev分支的部分内容是同一行

git介绍及基本使用_git_54

在dev分支上, 当想将dev_bug合并过来, 冲突出现

git介绍及基本使用_git_55

git介绍及基本使用_git_56

解决冲突: 对应冲突部分删除, 没有用的也删除

git介绍及基本使用_git_57

冲突解决

git介绍及基本使用_git_58

6.2 线上分支合并出现冲突

提示: 对于简单的行冲突会帮我们自动处理, 后来的即将冲突的代码会将之前的代码往下顶

注意1: 分支之间的切换, 最好要在当前分支没有被修改的情况下执行.

注意2: 千万不要把, 本地的dev分支合到master上!!!

1. git checkout master
2. git merge dev 
3. 如果出冲突,解决
4. git add .
5. git commit 
6. git push..

master分支新增并提交到远程

git介绍及基本使用_git_59

git介绍及基本使用_git教程_60

dev分支新增内容并提交到远程(新增的内容都在同一行

git介绍及基本使用_git_61

远程将dev分支合并到master分支: 无法自动合并

git介绍及基本使用_git教程_62

解决冲突: 线下合并, 解决冲突, 再提交到远程

git介绍及基本使用_git教程_63

git介绍及基本使用_git_64

git介绍及基本使用_git教程_65

当前因为修改了内容, 因该add + commit, 再push到远程

git介绍及基本使用_git教程_66

十一、远程仓库回滚

'''用dev分支举例'''
# 1)本地切换到远程要回滚的分支对应的本地分支
git checkout dev

# # 2)回滚本地分支
git reset --hard 版本号

# 3)本地版本强行提交给服务器  (谨慎使用)
git push origin dev -f

git介绍及基本使用_git_67

十二、其他了解

git flow
	-是一种建分支的方案
    -预览分支,开发分支,bug分支,主分支,测试分支...
pull和fetch区别
	git pull:拉代码+合并
    git fetch:拉代码,需要手动合进去
变基rebase
	-合并分支的时候,是否保留之前分支的日志
    
    
git客户端:
	-官方下载的一个(命令行下)
    -pycharm编辑器
    -sourcetree:美观,分支通过不同颜色线上,看着好看