zoukankan      html  css  js  c++  java
  • Git版本控制器

    Git介绍

    1 多人协同开发一个项目,版本管理工具:svn,git
    2 git实现版本的控制 - 什么是git:版本控制器 - 控制的对象是开发的项目代码 代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
    3 git,gitee,github,gitlab -gitee:中国的版github(很多公司在用) -github:远程仓库,全球最大的开源代码库 -gitlab:公司自己搭建的远程仓库,公司的代码放在上面
    4 git与svn比较 ​ 5 git的工作流程 -工作区:提交到暂存区:git add 指定文件名 -暂存区:提交到版本库:git commit -m 'dd' -版本库:只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本 ​ 6 git安装,去官网下载,一路无脑下一步
    7 在任意路径下点右键,选择git bash here >: mkdir test_git >: cd test_git >: git init #初始化仓库,在当前路径下创建一个.git隐藏文件夹 -当前路径就是工作区 -查看版本状态:git status -红色:新建,修改,删除,在工作区没有放到暂存区 -绿色:提交到暂存区,没有提交到版本库 -没有东西:说明所有变更都被版本管理起来了(都提交到版本库) >: git add . # 把当前路径下所有的变更都提交到暂存区 >: git commit -m '我的第一次提交' # 把暂存区的内容提交到版本库了 8 重点: git init git add . git commit -m ‘注释’ git status

    git与svn比较

    git工作流程

    版本库间的通信

    git分支管理

    Git基本操作

    初始化git仓库

    -初始化:git init  #在当前路径下创建一个.git
    ​
    -将已有的文件夹 - 初始化git仓库
        >: cd 目标文件夹内部
        >: git init
    ​
    -在指定目录下 - 初始化git仓库
        >: cd 目标目录
        >: git init 仓库名

    设置用户

    -设置全局(在家路径新建一个.gitconfig文件,把用户名邮箱写进去)
       >: git config --global user.name '用户名'
       >: git config --global user.email '用户邮箱'
             注:在全局文件 C:Users用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用
    ​
    -设置局部(在项目路径的.git文件夹下的config文件中加入了用户名和邮箱)
       >: git config  user.name 'liuqingzheng'
       >: git config  user.email '222@qq.com'
             注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
             注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户

    查看仓库状态

    # 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
        >: git status  
            -- 查看仓库状态
        >: git status -s  
            -- 查看仓库状态的简约显示

    git操作

    -撤销工作区操作
       >: git checkout .
            -- 撤销所有暂存区的提交
          本质是从版本库中拉取最新版覆盖工作区,如果没有被版本管理的文件,不会变化
       >: git checkout 文件名
            -- 撤销某一文件的暂存区提交   
        
    -撤销暂存区操作(很少使用,了解即可)
       >: git reset HEAD .
            -- 撤销所有暂存区的提交
       >: git reset 文件名
            -- 撤销某一文件的暂存区提交
       >: git reset .
            -- 撤销所有暂存区的提交
        
    -撤销版本库提交
      -回滚暂存区已经提交到版本库的操作:
        查看历史版本(版本管理日志):
            >: 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

    过滤文件

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

    多分支开发

    1 查看分支:git branch  # 绿色的意思是当前所在分支
    2 新建分支 git branch dev
    3 切换分支 git checkout dev
    4 删除分支  git branch -D dev # 应该切换到其他分支,再删除
    5 分支合并 git merge 分支名
        git checkout master  # 切换到主分支
        git merge dev         # 把dev分支合并到主分支
        

    远程仓库

    gitee,github,gitlab
    remote源操作(远程仓库)
        -查看远程仓库:git remote
        -添加远程仓库(远程仓库的名字origin):git remote add origin https://gitee.com/liuqingzheng/test.git
        
    git项目创始者和开发者
    采用ssh协议连接远程源
    提交本地代码到远程仓库
    ​
    git flow:git 工作流,人为设定的一个标准,多条分支,分别有不同的用途

    1 remote源操作(远程仓库)

    -查看远程仓库:
        >: git remote
            
    -添加远程仓库(远程仓库的名字origin):
        >: git remote add 远程仓库名字 仓库地址
        >: git remote add origin https://gitee.com/liuqingzheng/test.git
      
    -删除远程仓库
        >: git remote remove origin

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

    3 git项目创始者和开发者

    项目创始者

    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

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

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

    5 公司操作流程

    1 到了公司,公司会给你一个gitlab账号和密码,(也可能是你自己注册)
    2 登进去以后,就能看到你能开发的项目
    3 git clone 项目地址
    4 改代码---》一顿操作
    4 提交到远程ssh方案(生成公钥私钥,配置到你账号中)

    pycharm配置git

     

    协同开发

    1 多人开发同一个项目
    2 现在你们git clone 项目,在你本地了
    3 可以改代码了,当你git  push 的时候,提交不了
    4 项目管理员分配给你权限(gitee中管理--》仓库成员--》邀请成员)
    5 这一个项目有一个管理员,若干开发者
    6 重点:不能夸版本提交,只能先拉到最新,再提交
    7 如果某个开发者再s1.py 的第14行加入了东西,我也加入了,他先提交(它没问题)
    8 当我再拉取,出冲突了
        <<<<<<< HEAD
        你的代码
        =======
        同事的代码
        >>>>>>> d78b8fb39f6469e810868218a052bc3174b3e1fc
    ​
    9 解决冲突
        -留你的代码:你写的好
        -留他的代码:你觉得他写的好
        -你们的都留着:你俩虽然改了一行,但是功能不一样

    分支合并

    1 版本库又两套
        -本地一套
            -本地有master,dev分支
        -远程一套
            -远程现在只有master分支
    2 把本地dve提交到远端
        git push origin dev
        现在远端有两个分支 master和dev
    3 删除本地分支,删除远程分支(点点点)
    ​
    4 直接在远程创建分支(点点点)
    5 把远端的dev拉到本地

    1 线上分支合并

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

    2 线下分支合并提交

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

    3 合并分支冲突解决

    1 再master加一行,提交到版本库
    2 再dev1同样尾增增加一行,提交到版本库
    3 把dev1合并到master,就会出冲突
        -切到master分支
        -git merge dev1  有冲突
        -解决冲突(到底留什么,你觉得)
        -提交到远端

    远程仓库回滚

    1 远程仓库,回到最初路飞第一次提交的地方
    2 再本地回复到第一次提交
        git reste --hard 59dbf80c
        git push origin master -f # 强制提交
        
    3 切记 -f 清醒的时候使用

    其他了解

    git flow
        -是一种建分支的方案
        -预览分支,开发分支,bug分支,主分支,测试分支...
    pull和fetch区别 git pull:拉代码
    +合并 git fetch:拉代码,需要手动合进去
    变基rebase
    -合并分支的时候,是否保留之前分支的日志 git客户端: -官方下载的一个(命令行下) -pycharm编辑器 -sourcetree:美观,分支通过不同颜色线上,看着好看
    从来就没有正确的选择,我们只不过是要努力奋斗,使当初的选择变得正确。
  • 相关阅读:
    COJ 0981 WZJ的数据结构(负十九)树综合
    BZOJ 3153 Sone1
    点分治模板
    thinkphp或thinkcmf 《文章编辑,文章添加》 访问另一个表的分类,添加入另一个表时将id值以(,)逗号分隔储存,编辑时以(,)逗号分隔并且相等的id值被选中
    《手机端》让多出的导航变水平拖动,不让他 float 撑下去
    favicon.ico 网站小图标标识
    CSS3实战开发: 折角效果实战开发
    jquery怎么在点击li标签之后添加一个在class,点击下一个li时删除上一个class?
    position 有五个值:static、relative、absolute、fixed、inherit。
    CSS3 transition 属性过渡效果 详解
  • 原文地址:https://www.cnblogs.com/gfeng/p/14769657.html
Copyright © 2011-2022 走看看