GIT 视频学习 记录

153 阅读7分钟

GIt

  • 不要把时间浪费在你一定会后悔的事情上

一、概念

1.实际开发场景

  1. 备份
  2. 代码还原
  3. 协同开发
  4. 追溯问题代码的编写人和编写时间

2.版本控制器的方式

  1. 集中式版本控制工具

    1.版本库是集中存放在中央服务器的

    2.必须联网才能工作,局域网或互联网

    3.工具:SVN 和 CVS

  2. 分布式版本控制工具

    1.没有中央服务器

    2.每个人的电脑上都是一个完整的版本库

    3.无需联网

    4.工具:GIT

3.优点

  1. 速度快
  2. 对非线性开发模式的强力支持(允许成千上万并行开发的分支)
  3. 完全分布式
  4. 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)

4.GIT工作流程图

image.png

  1. clone 克隆:从远先仓库中克隆代码到本地仓库
  2. checkout 检出:从本地仓库中检出一个仓库分支然后进行修改
  3. add 添加:在提交前先将代码提交到暂存区
  4. commit 提交:提交到本地仓库,本地仓库中保存修改的各个历史版本
  5. fetch 抓取:从远程仓库,抓取到本地仓库,不进行任何的合并动作,一般操作较少
  6. pull 拉取:从远程仓库拉到本地库,自动进行合并merge,然后放到工作区,相当于fetch+merge
  7. push 推送:修改完成后,需要团队成员共享代码时,将代码推送到远程仓库

二、安装与常用命令

1.常用Linux指令

  • ls/ll 查看当前目录【隐藏文件用ll】
  • cat 查看文件内容
  • touch 创建文件
  • vi vi编辑器
    • 键盘点击 inset 变为可编写
    • 编写完成,点击ESC
    • 输入 :wq保存退出( :是需要打的)

2. 常用windows指令

  • dir 查看查看当前目录

2.安装

  1. git-scm.com/download/wi…
  2. 下载后一路默认点下去

检查是否安装成功:桌面右键是否有GIT BASH HERE和 GIT GUI HERE

3.区别GIT BASH 和 GUI

  1. Git GUI: Git提供的图形界面工具
  2. Git Bash: Git提供的命令行工具,相当于微型的Linux窗口

4.基本配置

4.1 设置用户名和email地址
  1. 打开Git Bash
  2. 设置用户信息
git config --global user.name '用户名'
git config --global user.email 'email地址'
  • 若是输错了就重新输入一次
  • 查看配置
git config --global user.name
git config --global user.email
4.2为常用指令配置别名(可选)
  1. 打开用户目录,创建 .bashrc 文件,touch ~/.bashrc
  2. .bashrc文件中输入
//用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
//用于输出当前目录所有文件及基本信息
alias ll='ls -all'
  1. 打开gitBash,执行source ~/.bashrc
4.3 解决GitBash乱码问题
  1. GitBash git config --global core.quotepath false
  2. githome/etc/bash.bashrc文件加入{git_home}/etc/bash.bashrc 文件加入 {git_home}是git安装的地址
export LANG='zh_CN.UTF-8'
export LC_ALL='zh_CN.UTF-8'

5 获取本地仓库

  • 使用Git对代码进行版本控制
  1. 在电脑的任意位置创建一个空目录,作为本地Git仓库
  2. 进入仓库,右键git bash
  3. 执行命令git init,初始化当前git仓库
  4. 创建成功后在文件夹下能看见隐藏的.git目录

6 基本操作指令

  • 工作目录:除了.git文件都是工作目录
  • git工作目录下对于文件的修改会存在几个状态,这些修改的状态会随着我们执行git命令而变化 image.png
6.1 查看修改的状态

git status

6.2 工作区 -> 暂存区

git add .or git add 单个文件名

6.3 暂存区 -> 仓库

git commit - m "提交的内容做了什么修改"

6.4 查看提交日志

git log [option]

  • option

    • -all 显示所有分支
    • --pretty=oneline 将提交的信息显示为一行
    • --graph 以图的形式显示
    • --abbrev-commit 使用输出的commitedid更简短
    • 可以叠加使用
  • HEAD -> 分支名称 代表当前分支是谁

6.5 版本回退

git reset --hard commitID

  • commitID 可以使用git-log or git log 指令查看
6.6 查看已删除的提交记录

git reflog

6.7 设置不希望被管理的文件
  1. touch .gitignore
  2. vi .gitignore
  3. 写入不希望被管理的文件名,退出
7.分支
  • 把自己的工作从开发主分支上分离出来进行重大bug修改、开发新的功能,以免影响主线
7.1 查看本地分支

git branch

7.2 新建分支
  • 方法一:git branch 新分支名称
  • 方法二:git checkout -b 不存在的分支名
    • 新建分支 + 切换到新的分支
7.3 切换分支

git checkout 分支名

7.4 合并分支

git merge 分支名

  • fast-forward 快进模式

    • 分支的内容和master一致,除了分支多了一个文件,可以直接把master分支名移动到当前分支上
  • 把分支名的分支内容合并到当前分支上

7.5 删除分支

git branch -d 分支名

  • 删除分支时,要做各种检查

git branch -D 分支名

  • 不做任何检查,强制删除
7.6 解决冲突
  • 背景:不同分支对同一段代码进行修改
  • 合并后的文件:

image.png

  • 解决办法:
    1. 手动解决冲突的地方
    2. 重新add 和 commit
7.7 开发中使用原则与流程
  • master 生产分支
    • 线上分支,主分支
  • develop 开发分支
    • 从master创建的分支,开发部门的主要开发分支,开发完成,合并到master分支,准备上线
  • feature/XXX分支
    • 从develop创建的分支,同期并行开发
  • hotfix/XXX分支
    • 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支
  • test分支
    • 代码测试
  • pre分支
    • 预上线分支

三、Git远程仓库

1. 常用的代码托管服务

  1. gitHub
    • 开源私有软件项目的托管平台
  2. GitLab
    • 企业、学校内部搭建git私服,安全
  3. 码云
    • 服务器在国内,速度快

2.注册码云

3.新建仓库

image.png

  • 点击菜单栏加号,新建仓库
  • 输入内容,点击创建

4. 配置SSH公钥

ssh-keygen -t rsa

  • 不断回车
    • 若公钥已经存在,则自动覆盖

5. 查看公钥

cat ~/.ssh/id_rsa.pub

6.本地仓库推码云上

  1. 点击gitee 图像 - 设置 - SSH公钥
  2. 粘贴本地设置的公钥
  3. 在git Bash中检验设置是否成功ssh -T git@gitee.com
    • 会询问是否是第一次访问gitee,输入yes即可

image.png

  1. 点击 我的 找到要推上去的仓库,复制HTTPS
  2. 告诉本地仓库,远程仓库是哪一个git remote add origin HTTPS地址 origin是远程仓库的名字,一般取origin
    • 检验当前是否有远程仓库 git remote,显示origin则算成功
  3. 本地仓库推到远程仓库 git push origin master,会弹出窗口输入gitee的账户和密码即可
  4. 刷新gitee界面,代码已经推上去了

7.操作远程仓库

7.1 添加远程仓库

git remote add <远端名称> <仓库路径>

  • 远端名称,默认origin
  • 仓库路径:从远端服务器获取的URL
移除remote

git remote remove 远端名称

7.2 查看远程仓库

git remote

7.3 推送远程仓库
  • git push [-f] [--set-upstream] [远端名称 [本地分支名称][:远端分支名]]
    • 若远程分支和本地分支名称相同,则可以只写本地分支git push origin master
    • --set-upstream推送到远端的同时并且建立起和远端分支的关联关系
    • -f强制覆盖
    • 若当前分支已经和远端分支关联,则可以省略分支名和远端名git push 将master分支推送到已关联的远端分支
7.4 本地分支和远程分支的对应关系

git branch -vv

  • 未绑定

image.png

-已绑定:git push --set-upstream 远端名称 本地分支名称:远端分支名称

image.png

7.5 从远程仓库克隆
  • 背景:已经有一个远端仓库,我们可以直接clone到本地
  • git clone HTTPS地址 [指定名字]
    • 不指定名字就是默认的名字
7.6 远程仓库抓取和拉取
  • 抓取 git fetch [remote name] [branch name]

    • 将仓库里的更新都抓取到本地,不会进行合并
    • 若不指定远端名称和分支名,则抓取所有分支
  • 拉取 git pull [remote name] [branch name]

    • 将远端仓库的修改拉到本地并自动合并,等同于fetch+merge
    • 若不指定远端分支和分支名,则抓取所有并更新当前分支
7.7 解决合并冲突
  • 编写代码先git pull,拉去最新的代码,解决代码冲突
  • 解决完毕git add . git commit -m "内容"
  • 再将代码推上去git push