Git 基础教程

1. 引言

  • 单人开发过程中,需要进行版本管理,以利于开发进度的控制
  • 多人开发过程中,不仅需要版本管理,还需要进行多人协同控制

2. 介绍

  • Git 是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
  • 官网:https://git-scm.com/

3. Git 安装

# 安装后,打开终端
# 如下信息会在提交代码时要使用,记录在你的每次提交中,以后才知道哪次提交是谁做的
# `git log` 可以查看

# 执行
git config --global user.name "Name" # 用户名
git config --global user.email "Email" # 邮箱

# 查看信息
git config -l

# 测试: 终端中执行,查看 git 版本
git version

4. 架构

  • 版本库:工作区中有一个隐藏目录 .git , 这个目录不属于工作区,而是 git 的版本库,是 git 管理的所有内容
  • 暂存区:版本库中包含一个临时区域保存下一步要提交的文件
  • 分支:版本库中包含若干分支,提交的文件存储在分支中
    在这里插入图片描述

5. 仓库

  • 对应的就是一个目录,这个目录中的所有文件被 git 管理起来
  • 以后会将一个项目的根目录,作为仓库
  • 仓库中的每个文件的改动都由 git 跟踪
5.1 新建仓库
# 选择一个空目录,执行指令:`git init`
# Initialized empty Git repository in "文件目录"
# 初始化了一个空白的 git 仓库
# 目录上出现一个略显白色的 .git 隐藏文件夹
# 暂存与分支都会存在这个文件夹中

在这里插入图片描述

# 整体的文件目录空间
## git 仓库目录
## 工作区

在这里插入图片描述

5.2 工作区
  • 执行 git init 的目录即为工作区,不包含 .git 目录
  • 所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制
5.3 暂存区
  • 暂存区
5.4 分支

6. 基本操作

6.1 查看仓库状态
  • 执行 git status 可以看到工作区中文件的状态
    在这里插入图片描述
# No commits yet		还没有任何的提交过程
# Untracked files:		文件未跟踪  
# test.html				test 文件就是未跟踪的文件
# nothing added to commit but untracked files present
# 除了未跟踪的文件外,没有添加到提交
6.2 暂存文件
  • 执行 git add .工作区中的文件全部存入暂存区
    在这里插入图片描述
# git add . 将文件`从工作区提交到暂存区`
# . 代表工作区中所有的文件
# 提交到暂存区后将不是未跟踪的状态
# `test` 文件变为 `new file`, 即仓库中`新建的文件`
# `test` 文件存放到`暂存区`
6.3 提交文件
  • 执行 git commit -m 'xxx'暂存区中的文件全部存入分支,形成一个版本
    在这里插入图片描述
# git commit -m 'xxx'
# -m 为 -message 的缩写
# 'xxx' 为此分支的`描述信息`
# -m 'xxx' 为必填项

7. 远程仓库

  • 当多人协同开发时,每人都在自己的本地仓库维护版本
  • 但很重要的一点是,多人之间需要共享代码,合并代码,此时就需要一个远程仓库
7.1 远程仓库工作模式

在这里插入图片描述

7.2 远程仓库选型
  • 有很多远程仓库可以选择,比如 github(https://github.com/),码云(https://gitee.com/)
  • 此两种可以注册自己测试使用,但是如果是商业项目,需要更多支持需要付费
  • 公司内部也可以有自己构建的远程仓库
7.3 基本操作
  • 每个开发人员,在面对远程仓库时,会面临的一些基本操作
7.3.1 注册 git 服务器账号
  • 码云注册账号,并登录
7.3.2 新建远程仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 新建仓库(空仓库/裸库)
# 自动添加路径
# `zx` 为用户名
# `zxwin_git` 为远程仓库的名字
# `HTTPS/SSH` 为远程仓库访问的两种协议
## 即 `https://gitee.com/zhang_xin12138/zxwin_git.git``zxwin_git`远程仓库`https`协议下的远程地址
## 即 `git@gitee.com:zhang_xin12138/zxwin_git.git``zxwin_git`远程仓库`ssh`协议下的远程地址
7.3.3 本地关联远程仓库
  • 执行 git remote add origin 远程地址 将远程地址都关联到本地,这样本地才知道要找哪个远程地址
    在这里插入图片描述
  • git remote -v 查看关联的地址
  • 地址名 + 地址
    在这里插入图片描述
7.3.4 推送文件到远程仓库
  • 执行 git push origin master
  • 输入用户名密码
  • 完成上传(将本地 master 传给远程 master
  • 将本地仓库中已经 commit 的内容 push 到远程仓库,以共享自己的代码
    在这里插入图片描述
    在这里插入图片描述
7.3.5 克隆远程仓库
  • 如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过 git clone 仓库地址 将其复制到本地
    在这里插入图片描述
  • 当远程仓库内容更新后
  • 进入克隆在本地的远程仓库
  • git pull origin master 拉取远程仓库修改后的内容
  • 1 file changed 为远程仓库更新的文件
    在这里插入图片描述
7.3.6 更新远程仓库内容
  • 修改本地的项目文件后
  • git add . 存入暂存区
  • git commit -m "xxx" 存入分支
  • git push origin master 推送新增的文件到远程仓库
    在这里插入图片描述
7.3.7 命令汇总
命令作用
git remote add origin 远程地址本地关联远程仓库
git push origin master将本地仓库内容上传到远程仓库
git pull origin master从远程仓库下载内容到本地仓库
git clone 远程地址将远程仓库复制到本地,并自动形成一个本地仓库

8. 分支

8.1 分支简介
  • 分支,是一个个版本最终存储的位置
  • 分支,就是一条时间线,每次 git commit 形成一个个版本,一个个版本依次存储在分支的一个个提交点上
    在这里插入图片描述
8.2 分支基操
8.2.1 查看分支
  • 查看当前仓库的分支 git branch
  • 仓库中默认只有 master 分支
  • 执行 git commit 时,默认是在 master 分支上保存版本
    在这里插入图片描述
8.2.2 创建分支
  • 在商业项目开发过程中,我们不会轻易的在 master分支 上做操作
  • 我们会新建一个开发用的分支,在此分支上做版本的记录
  • 当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到master分支
  • 既保证开发过程中,可以及时记录版本,有保证master分支上每个提交点都是稳健版本
    在这里插入图片描述
  • *号标记的为有效分支
  • git commit 提交的文件依然提交给master分支
8.2.3 切换分支
  • 默认情况下,当前使用的分支是master分支
  • 可以切换到dev分支,则后续的git commit便会在dev分支上新建版本(提交点)
    在这里插入图片描述
8.3 新建分支细节
8.3.1 新分支初始内容
  • 每个分支都有一个指针,新建一个分支,首先是新建一个指针
  • 而且新分支的指针会和当前分支指向同一个提交点
  • 新分支包含的提交点就是从第一个提交点到分支指针指向的提交点
    在这里插入图片描述
8.3.2 多分支走向
  • master分支新分支,分别进行git addgit commit
  • 分支情况如下图
    在这里插入图片描述
    在这里插入图片描述
8.3.3 分支提交日志
  • 查看分支的提交日志,进而看到分支中提交点的详细情况
  • git log --online 简易日志
  • git log 完整日志
8.4 分支合并
  • 两个分支内容的合并
  • git merge 分支a 合并分支a
  • 合并的方式有两种: 快速合并三方合并
8.4.1 快速合并
  • 如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可
    在这里插入图片描述
    在这里插入图片描述
8.4.2 三方合并
  • 在不具备快速合并的条件下,会采用三方合作
    在这里插入图片描述
    在这里插入图片描述
8.4.3 合并冲突
  • 两个分支进行合并,但他们含有对同一个文件的修改,则在合并时出现冲突git无法决断该保留改文件哪个分支的修改

  • 冲突演示

    • master 分支修改a文件
    • div 分支修改a文件
    • master分支 合并dev分支
      • git merge dev
      • 出现冲突: CONFLICT(content): Merge conflict in a文件
    • 此时,打开a文件
      • 冲突后,git会将两个分支的内容都展示在文件中
      • 两个分支的内容用 <<<<< ====== >>>>>>>做了分隔
  • 冲突解决

    • 出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容
    • 解决方案:
      1. 保留某一方的,删除另一方的
      2. 保留双方的
      3. 但无论如何,要记得删除 <<< === >>> 这些
      4. 本质是两人协商为冲突的内容,定制出合理的内容

9. Idea 关联 Git

9.1 关联 git
  • File > Settings 关联过程是自动的
9.2 创建仓库

新建项目后,将项目目录创建为git仓库

  • 注意: 要设置忽略文件.gitignore
  • 作用: 被忽略的文件会被版本记录忽略,版本中不包含他们
  • 范围: 不需要和其他开发共享的文件
9.3 提交 commit
  • 创建好仓库后,做第一次提交
  • VCS/Commit...
  • Unversioned Files 4 files
9.5 上传到远程仓库 push
  • VCS/Git
9.7 更新本地项目
  • 如果远程仓库有更新,则本地项目也需要一起更新
  • VCS/Git/Pull
9.8 冲突解决
  • 合并分支时,如果出现冲突,则需要解决冲突
  • 冲突出现,弹窗中可以选择如下
    • Accept Yours 保留本地
    • Accept Theirs保留远程
    • 有更多复杂的要求可以选择"Close",然后在idea中修改,再commit

10. 多人协同开发

  • 多人协同开发,git操作
10.1 项目管理员
  1. 由管理员负责创建一个远程库,初始的库中什么也没有,为裸库。库的名称建议和项目同名
  2. 管理员会在idea中创建一个初始项目,其中包含.gitignore文件,并在项目根目录下建立本地库,并建立dev分支
  3. 管理员将本地库上传到远程库
  4. 将其他开发人员拉入远程库的开发成员列表中,使得其他开发人员可以访问该远程库
10.1.1 邀请用户

在这里插入图片描述

10.1.2 设置分支

在这里插入图片描述

10.2 开发人员
  1. 初始化: 在ideaclone远程库,获取项目。会建立本地库
  2. 后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit提交到本地的dev分支中,然后上传(push)到远程dev分支
  3. 需要更新项目内容时,通过pull从远程仓库拉取内容
  4. 注意: 多人协同时,每次在push到远程库前,都先做一次pull
    • 一来是把远程最新内容合并到本地
    • 二来是核实本地内容是否和远程内容有冲突
  5. 后续的开发,会接到一个个的功能任务,往复操作2,3,4

11. 经典问题

  • 在使用https协议做push时,如果曾经使用过码云,但密码有过改动,此时会报错
  • 使用https协议报错
    • You do not have permission to push to the repository via HTTPS
  • 解决方案:
    • 控制面板 > 凭据管理器 > 删除对应凭证,再次使用时会提示重新输入密码
    • 删除之前的码云凭证,然后重新push即可(输入用户名,密码)

12. 总结

  • 企业做项目肯定是多人合作开发,这时候需要用Git协调任务,这里看网上教学视频,做的笔记
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值