集腋成裘-21-git使用-03进阶篇

前言

集腋成裘-12-git使用-01创建库和 集腋成裘-13-git使用-02进阶篇 从使用层面进行了简单的介绍,下面从命令形式进行介绍

一、快速入门

1.1  Git与GitHub

  Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:http://git-scm.com/

  GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。

  Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:

  • 无GitHub:在本地 .git 文件夹内维护历时文件
  • 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

其他:

    集中式:远程服务器保存所有版本,用户客户端有某个版本
    分布式:远程服务器保存所有版本,用户客户端有所有版本

 一言以蔽之:GitHub是文件远端存放的平台,Git是文件版本控制的工具

1.2  Hello Git

  安装过程不再赘述,这里开始第一行代码,即检查Git是否安装成功

$ git --version
查看版本号

1.3 基本概念

我们先来理解下Git 工作区、暂存区和版本库概念

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

二、Git使用之小P创业史

假设小P准备创建一个《网上书城》的项目,

2.1  初创期:单枪匹马自己干

  2.1.1 通过git控制代码

   把文件纳入到版本控制大致分三步:

  • 进入文件夹进行初始化
  • 添加要管理的文件
  • 生成版本
  1. 进入待管理文件夹
    cd /文件路径
  2. 初始化
    git init
  3. 查看管理目录下的文件状态
    git status
  4. 管理指定文件(红变绿)
    git add 文件名
    git add . 
  5. 生成版本

    git commit -m '版本备注信息'
  6. 文件配置(如果是首次commit命令,需要通过以下命令配置跟人信息)

    git config --global user.email "1692134188@qq.com"
    git config --global user.name "Yango"
  7. 查看日志
    git log
    git log --graph --pretty=format:"%h %s"

 

2.1.2  完善、拓展新功能

  对历史功能的完善,如:完善了index.html首页功能

  拓展新功能,添加了readme系统说明

  此时两个文件都会变红,需要重新添加(git add .),并提交(git commit -m '备注')

git add .
git commit -m '备注'

2.1.3 添加打折功能,到期后回滚

  世界读书日,需要添加一个打5折优惠功能,假设需要修改到index页面和新增一个discount.py文件。

  过了这天后,价格恢复原价,代码回滚   

  回滚流程:一、找到想要回滚的版本号。二、回滚
git add .
git commit -m 'v4版本,世界读书日,全场五折'
世界读书日,全场五折
git log查看日志,找到想要回滚的版本号
git log
git reset --hard 要回滚的版本号

2.1.4 商城&紧急bug修复

  正常开发一个功能(商城功能)是在dev分支上进行的,线上突然有一个紧急bug需要修复,

  

 

 

  1. 查看分支
    git branch
  2. 创建分支
    git branch dev
  3. 切换分支
    git checkout dev
    

      

  4. 同样道理从master分支上切出一个bug分支,并在bug分支上修改相应的bug,并进行 commit提交
  5. 合并分支(可能会有冲突)
    1:切换到mater分支并检查
    git checkout master
    git branch
    2:把bug分支merge到主干上
    git merge bug_01 
  6. 删除分支
    1.  
      git branch -d 分支名
       
    2.  
  7. 继续在dev上分支开发,开发完成后提交
    1.   
  8. 产生处理(此时再回到master分支 进行合并dev分支,由于共同修改了index.html文件,所以会发生冲突)
  9. 手动处理后并再次commit提交

  

2.2  GitHub

  2.2.1 准备工作

  • 申请账号
  • 创建云端仓库

  2.2.2 把代码推送到GitHub

  • 1:给远程仓库起别名
    git remote add origin https://github.com/1692134188/bookstore.git
    2:向远程推送代码 git push -u origin master

  2.2.3 初次在公司新电脑下载代码

1:克隆远程仓库代码(内部已实现git remote add origin 远程仓库地址)
git clone 远程仓库地址
2:切换分支
git checkout 分支

  2.2.4 在公司的dev上面开发代码,推送到远程

1:切换到dev分支
git checkout dev
2:把master分支合并到dev
git merge master
3:修改代码
4:提交代码
git add .
git commit -m ''
5:推送到远程
git push origin dev

  2.2.5 回到家,获取远程代码,继续写

1:切换到dev分支
git checkout dev
2:从远端拉取代码
git pull origin dev
3:继续开发

4:提交代码
git add .
git commit -m ''
5:推送到远程
git push origin dev

  。。。。。周而复始,直到有一天,出了差错,

 2.2.6 在公司写完代码没有及时提交到远程

1:切换到dev分支
git checkout dev
2:从远端拉取代码
git pull origin dev
3:继续开发

4:提交代码
git add .
git commit -m ''
5:推送到远程
在公司继续写代码,但是忘记推送了!!!!!!!!!

 2.2.7 回到家,发现公司写的代码没有提交,但是也只能再开发别的功能了

1:切换到dev分支
git checkout dev
2:从远端拉取代码  啊没有拉取到内容,倒霉忘记提交了
git pull origin dev  
3:继续开发

4:提交代码
git add .
git commit -m ''
5:推送到远程
git push origin dev

2.2.8 回到公司, 拉取代码,合并代码,如有冲突解决冲突

2.2.9  其他

git pull origin dev = git fetch origin dev + git merge origin dev

 

2.3  rebase 变基

  使提交记录更简洁,不分叉

2.3.1 场景一:多次commit记录整合

  举个例子,现在在一个新的future分支创建一个商城在线聊天室功能。假设第一天开发了前端,第二天开发了后台端40%,三天开发后端70%,第四天开发后台90%,第五条开发后端100%。

应用场景一:合并多次提交记录,更简洁
1:切换到master分支,
$ git checkout master
2:把dev分支合并到master
$ git merge dev
3:从master上切一个新的future分支,用于开发聊天室ChatRoom
git branch ChatRoom
4:回到ChatRoom开始开发
git checkout ChatRoom
5:开发第一天
$ git add .
$ git commit -m 'ChatRoom V1:前端开发完成'
6:开发第二天
$ git add .
$ git commit -m 'ChatRoom V2:后端完成40%'
7:开发第三天
$ git add .
$ git commit -m 'ChatRoom V3:后端完成70%'
8:开发第四天
$ git add .
$ git commit -m 'ChatRoom V4:后端完成90%'
9:开发第五天
$ git add .
$ git commit -m 'ChatRoom V5:后端完成100%'
聊天室提交记录

 

 我们需要把V2和V5版本统一整合成一次提交记录:后端开发完成 ,按照截图标识修改一些文件内容

10:开始变基(方式一)
git rebase -i 版本号:表示要合并的起始位置
$ git rebase -i  08131d08ac095679d7bad5517cdc406e2da254a4
11:开始变基(方式二)
git rebase -i HEAD~n n:表示把最近的n次进行合并
git rebase -i HEAD~4

 

 

再次查看日志记录

2.3.2 场景二:合并多个分支

从master上切出三个分支featureA和featureB和featureC,分别由三个开发人员开发;
A分支率先开发完成,并提交到master,
此时B分支再想同步master分支,git merge master。此时查看日志
如果C分支想同步master分支,git rebase master。此时查看日志

1:从master切出3个分支
$ git branch featureA
$ git branch featureB
$ git branch featureC
2:回到A分支上开发,开发完成并提交。推送到远程
$ git checkout featureA
$ git add .
$ git commit -m 'A分支,版本A-1,A功能开发完成'
$ git push origin featureA

3:合并A分支到master上
$ git checkout master
$ git merge featureA

4:分支B正常开发:提交,推送到远程
$ git checkout featureB
$ git add .
$ git commit -m '分支 B,版本B-1,开发50%'
$ git add .
$ git commit -m '分支 B,版本B-2,开发80%'
$ git push origin featureB


5:分支C正常开发:提交,推送到远程
$ git checkout featureC
$ git add .
$ git commit -m '分支 C,版本C-1,开发60%'
$ git push origin featureC
$ git add .
$ git commit -m '分支 C,版本C-2,开发70%'
$ git push origin featureC
准备工作

此时是B分支没有从master上merge的log日志

6:分支B采取直接从master上merge
$ git checkout featureB
$ git log
$ git merge master
$ git log

 

此时是B分支没有从master上rebase的log日志

 

 

7:分支C采取从master上rebase
$ git checkout featureC
$ git log
$ git rebase master
$ git log

2.4  多人开发

  2.4.1 创建组织

   

  2.4.2 基于组织创建项目

  2.4.3 邀请成员进组织 

  2.4.4 给成员分配权限

  2.4.5 管理员代码上传 

   git init

   git add .

  git commit -m "first commit"

  git remote add origin https://github.com/YangoCity/BookStore.git

  git push -u origin master

 

  2.4.6   开发获取代码

 

 

三、Git使用

 

3.0. 把gitlab远程remote的http修改成ssh

 
1:使用git remote -v查看origin和upstream的url,
2:把http更改为ssh地址,
命令:git remote set-url origin xxxx
例如:git remote set-url origin git@10.5.1.32:9022/root/erp.git
3,验证是否设置成功
显示Welcome to GitLab, yourname! 代表成功。 

3.1. GitLab免密登录

第一步:检查是否存在SSH秘钥

1.Enter ls -al ~/.ssh to see if existing SSH keys are present1.0
2.如果显示ls: 无法访问/root/work/.ssh: 没有那个文件或目录 表示目录不存在,ssh不存在

第二步:生成SSH key

1、输入指令:
 
$ ssh-keygen -t rsa -C "your_email@example.com"
例如:ssh-keygen -t rsa -C "yangke1@cyai.com
注意:字母C要大写,如下图所示: 
 
2、生成密钥 
 
Enter file in which to save the key (/root/work/.ssh/id_rsa):  【按回车】
Enter passphrase (empty for no passphrase): 【输入密码】
Enter same passphrase again: 【再次输入密码】

第三步:在gitlab用户设置ssh密钥填写公钥

  
  1、点击 生成 key
 
2、测试
输入yes
 

3.2. 忽略本地修改,强制拉取远程到本地

主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉

git fetch --all

git reset --hard origin/dev

git pull

 

posted @ 2020-07-05 15:28  逍遥小天狼  阅读(189)  评论(0编辑  收藏  举报