• Git


    版本控制器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    """
    完成 协同开发 项目,帮助程序员整合代码
    i)帮助开发者合并开发的代码
    ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突

    软件:SVN 、 GIT(都是同一个人的个人项目)
    github、gitee(两个采用git版本控制器管理代码的公共平台)

    git:集群化、多分支
    """

    git

    简介

    1
    2
    3
    4
    """
    什么是git:版本控制器 - 控制的对象是开发的项目代码
    代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
    """

    git与svn比较

    git的工作流程

    版本库间的通信

    git分支管理

    git使用

    流程(核心总结)

    1
    2
    3
    4
    5
    """
    1)有红色信息(工作区有内容),就执行 add
    2)全绿信息(内容全部在暂存区),才执行 commit
    3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
    """

    安装

    1
    2
    # 1.下载对应版本:https://git-scm.com/download
    # 2.安装git:在选取安装路径的下一步选取 Use a TrueType font in all console windows 选项

    基础命令

    将已有的文件夹 - 初始化为git仓库
    1
    2
    3
    4
    """
    >: cd 目标文件夹内部
    >: git init
    """
    在指定目录下 - 初始化git仓库
    1
    2
    3
    4
    """
    >: cd 目标目录
    >: git init 仓库名
    """
    在仓库目录终端下 - 设置全局用户
    1
    2
    3
    4
    5
    6
    """
    >: git config --global user.name '用户名'
    >: git config --global user.email '用户邮箱'

    注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
    """
    在仓库目录终端下 - 设置局部用户
    1
    2
    3
    4
    5
    6
    7
    8
    9
    """
    >: git config user.name '用户名'
    -- 用户名
    >: git config user.email '用户邮箱'
    -- 用户邮箱

    注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
    注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
    """
    查看仓库状态
    1
    2
    3
    4
    5
    6
    7
    """
    # 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
    >: git status
    -- 查看仓库状态
    >: git status -s
    -- 查看仓库状态的简约显示
    """
    工作区操作
    1
    2
    # 通过任何方式完成的文件删与改
    # 空文件夹不会被git记录
    撤销工作区操作:改、删(了解)
    1
    2
    3
    4
    5
    6
    """
    >: git checkout .
    -- 撤销所有暂存区的提交
    >: git checkout 文件名
    -- 撤销某一文件的暂存区提交
    """
    工作区内容提交到暂存区
    1
    2
    3
    4
    5
    6
    """
    >: git add .
    -- 添加项目中所有文件
    >: git add 文件名
    -- 添加指定文件
    """
    撤销暂存区提交:add的逆运算(很少使用)
    1
    2
    3
    4
    5
    6
    7
    8
    """
    >: git reset HEAD .
    -- 撤销所有暂存区的提交
    >: git reset 文件名
    -- 撤销某一文件的暂存区提交
    >: git reset .
    -- 撤销所有暂存区的提交
    """
    提交暂存区内容到版本库
    1
    >: git commit -m "版本描述信息"
    撤销版本库提交:commit的逆运算
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    """
    回滚暂存区已经提交到版本库的操作:
    查看历史版本:
    >: 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
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # .gitignore 文件
    # 1)在仓库根目录下创建该文件
    # 2)文件与文件夹均可以被过滤
    # 3)文件过滤语法

    """ 过滤文件内容
    文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
    /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤

    eg:
    a.txt:项目中所有a.txt文件和文件夹都会被过滤
    /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
    /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
    *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
    空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
    """

    多分支开发

    分支操作
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    """
    1.创建分支
    >: git branch 分支名

    2.查看分支
    >: git branch

    3.切换分支
    >: git checkout 分支名

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

    5.删除分支
    >: git branch -d 分支名

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

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

    """
    1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发)
    2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可
    3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev)
    """

    远程git开发

    两种本地与远程仓库同步

    1
    2
    3
    4
    5
    6
    7
    """
    1)你作为项目仓库初始化人员:
    线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push)

    2)你作为项目后期开发人员:
    远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发
    """

    remote源操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    """
    1)查看仓库已配置的远程源
    >: git remote
    >: git remote -v

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

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

    4)添加远程源
    >: 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都可以提供选择不同的源码,和不同的远程仓库交互
    """

    采用ssh协议连接远程源

    创建电脑的公钥私钥
    1
    2
    3
    4
    5
    6
    7
    官网:https://gitee.com/help/articles/4181#article-header0

    本机命令,生成公钥:ssh-keygen -t rsa -C "*@*.com"
    邮箱可以任意填写
    本机命令,查看公钥:cat ~/.ssh/id_rsa.pub

    码云线上添加公钥:项目仓库 => 管理 => 部署公钥管理 => 添加公钥 => 添加个人公钥
    提交本地代码到远程仓库
    1
    命令:git push origin master

    如何成为其他码云项目的开发者
    1
    2
    3
    4
    5
    """
    1)生成自己电脑的公钥,配置到自己的码云个人公钥中
    2)把自己的码云用户名提供给别人,别人添加你成为项目开发者
    3)自己确认添加,成为开发者,克隆开发项目,进行开发
    """
    如何成为公司自建git服务器的开发者
    1
    2
    3
    4
    5
    """
    1)生成自己电脑的公钥(公钥生成一次就可以了),把它提交给项目管理者
    2)项目管理者添加你公钥,加入开发者,提供给你项目克隆地址
    3)克隆开发项目,进行开发
    """

    协同开发

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    """
    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
    """

    冲突解决

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    """
    1)在远程仓库和本地仓库版本不一致时,拉取远程仓库版本到本地时,两个版本进入融合,可能会出现版本冲突

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

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

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

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

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

    """

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

    线上分支合并

    远程仓库回滚

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    """
    用dev分支举例
    1)本地切换到远程要回滚的分支对应的本地分支
    git checkout dev

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

    3)本地版本强行提交给服务器
    git push origin dev -f
    """

    git

    一、git介绍

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

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

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

    • 无GitHub:在本地 .git 文件夹内维护历时文件
    • 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
    • 集中式:远程服务器保存所有版本,用户客户端有某个版本
    • 分布式:远程服务器保存所有版本,用户客户端有所有版本

    1、Git把管理的文件分为了两个区域四个状态。

    工作区(workspace):当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看。

    版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区(index/stage/cached),然后再执行【git commit -m '又一个版本'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录。

    • 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    • Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
    • 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
    • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    • 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
    • 你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
    • Git的四个区域:工作目录(Workspace)-->暂存区域(Index/Stage/Cached)-->本地仓库(Repository)-->远程仓库(Remote)Git命令就是用于将文件改动切换到不同的空间来记录
    • Git的四种状态:Untracked--> Unmodified--> Modified-->Staged

    2、基础命令

    • git init,初始化,表示即将对当前文件夹进行版本控制。
    • git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
    • git diff index.html,查看此文件在本地工作目录和暂存区的区别。
    • git diff --cached index.html,查看此文件在暂存区和本地仓库的区别。
    • git add 文件名,将指定文件添加到版本库的暂存状态。
    • git add . 把当前目录下所有改动的文件都添加到版本库的暂存状态。
    • git commit -m '提交信息',将暂存区的文件提交到版本库的分支也就是本地仓库。只有将文件提交到本地仓库,git才真正的对文件实现了管理
    • git log,查看提交记录,即:历史版本记录
    • git log -p,更详细的历史版本记录
    • git log -1,显示最近一条
    • git log --oneline,记录显示成一行
    • $ git log --oneline --decorate,记录显示成一行,还可以看到分支
    • git reflog,查看每一次命令
    • git reset --hard 4459657,回滚
    • git checkout -- index.html,用暂存区的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
    • git reset HEAD index.html,用本地仓库版本替换暂存区的版本
    • git rm index.html,git commit -m "remove index.html"从版本库中删除该文件
    • git rm --cached index.html"从暂存区删除,可以理解成git add index.html 的反命令
    • git rm -f index.html"从暂存区和本地工作目录中同时删除
    • git mv index.html home.html"从暂存区和本地工作目录中同时改名为home.html
    • git config --local user.name 'silencio9'
    • git config --local user.email '343096080@qq.com'

    二、分支管理  

    branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。

    1、创建与合并分支  

    2、解决冲突  

    3、基本命令  

    • git branch 分支名称             创建分支
    • git checkout 分支名称          切换分支
    • git branch                          查看所有分支
    • git branch -d 分支名称         删除分支
    • git merge 分支名称              将指定分支合并到当前分支
    • git remote查看远程库的信息
    • git remote -v显示更详细的信息

    4、分支

    • master分支是主分支,因此要时刻与远程同步;

    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    5、标签

    • git tag -a v1.0    当前内容打一个标签(方便快速回滚),每次提交都可以打个tag
    • git tag -a v1.0 aa27de7   给aa27de7内容打一个标签(方便快速回滚)
    • git reset --hard v1.0    回滚到v1.0版本
    • git tag          查看当前所有的标签
    • git show v1.0      查看当前1.0版本的详细信息
    • git tag -a v1.2 -m "version 1.2 release is test"          创建带有说明的标签,-a 指定标签名,-m 指定说明文字
    • git tag -d 1.0     为同一个提交版本设置了两次标签,删除之前的v1.0

    三、远程仓库  

    1、创建SSH Key

    本地Git仓库和GitHub仓库之间的传输是通过SSH加密的

    第1步:创建SSH Key,一路回车,使用默认值即可。

    1
    ssh-keygen -t rsa -C "youremail@example.com"

    找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容: 最后点“Add Key”,你就应该看到已经添加的Key

    • 为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
    • GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
    • 提示:在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
    • 如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的,公司内部开发必备。

    2、创建远程仓库

    你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。

    第1步:登陆GitHub,然后,在右上角找到“New repository”按钮,创建一个新的仓库:

    第2步:$ git remote add origin git@github.com:silencio9/blog.git #添加远程仓库

    第3步:git push -u origin master # 推到远程

    以后:git push origin master #以后只要本地作了提交,此命令就可以推到远程库

     

    3、从远程库克隆

    假设我们从零开发,没有本地库那么最好的方式是先创建远程库,然后,从远程库克隆。

    第1步:登陆GitHub,创建一个新的仓库,名字叫gitskills勾选Initialize this repository with a README,这样GitHub会自动创建一个README.md文件:

    第2步:$ git clone git@github.com:silencio9/gitskills.git #在本地找一个目录,克隆远程库 或者 $ git clone https://github.com/silencio9/gitskills.git

    • GitHub给出的地址不止一个,还可以用https://github.com/silencio9/gitskills.git这样的地址。Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
    • 使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

    4、基础命令

    • $ ssh-keygen -t rsa -C "youremail@example.com",创建SSH Key。
    • $ git remote add origin git@github.com:silencio9/blog.git # 为地址起一个别名origin 或者 $ git remote add origin https://github.com/silencio9/blog.git
    • $ git push -u origin master #将本地master分支内容以及版本信息推送到GitHub
    • $ git push origin dev # 将本地dev分支内容以及版本信息推送到GitHub
    • $ git clone git@github.com:silencio9/gitskills.git #在本地找一个目录,克隆远程库 或者 $ git clone https://github.com/silencio9/gitskills.git
    • $ git Branch # 默认获取到得只有master分支
    • $ git branch dev origin/dev # 创建dev分支且和远程dev分支同步
    • $ git checkout dev # 切换到dev分支
    • $ git pull origin dev # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
    • $ git fetch origin dev # 从GitHub仓库获取dev分支最新内容到版本库的分支
    • $ git merge origin/dev # 将版本库的分支内容合并到工作区
    • 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】

    四、多人协作  

    1、合作者

    将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码。

    2、组织

    创建一个组织,然后再该组织下可以创建多个项目,组内成员可以向组内所有项目提交代码。PS:也可以对某个项目指定合作者

    3、三人协同开发整个过程

    • 创建程序
      • 用户A创建程序,提交到GitHub
      • 用户B克隆项目
      • 用户C克隆项目
    • 开发功能
      • 用户A开发功能1
      • 用户B开发功能2
      • 用户C开发功能3
    • 提交
      • 用户A提交功能1,并push(A用户手速快,先提交。)
      • 用户B提交功能2,无法push,因为GitHub上已经有其他人提交的新代码。
        解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能2。
      • 用户C提交功能3,无法push,无法提交,因为GitHub上已经有其他人提交的新代码。
        解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能3。
    • 获取最新代码
      • 用户A获取最新代码
      • 用户B获取最新代码
      • 用户C获取最新代码

    在上面红色标注的解决方法位置可以有三种方式操作,三者都可以完成合并并提交新功能,但是日志记录会有差异,如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁。

    • 先 git pull origin master   然后 git push origin master
    • 先 git fetch origin master 然后 git merge origin/master   再 git push origin master

    五、fork  

    • fork一下,然后这个项目就在自己仓库出现了
    • 从自己仓库获取代码并进行编辑提交
    • 创建并提交一个pull request,然后等待原作者是否同意这个pull request,如果同意那么在作者的源代码中就推出现小P提交的功能
        
    ##################
    cd blog  #进入程序目录
    git init   #git 初始化
    git status  #查看当前状态
    git add .   #工作区提交到暂存区
    git commit -m 'v1' #提交到版本库,并填写版本说明,以便以后回滚
    
    
    #修改文件后
    git diff #查看修改了什么地方
    
    #回滚
    git log #查看历史版本提交记录根据版本commit值可以进行回滚
    git reflog  #记录每一次命令
    git reset --hard 版本号  #回滚
    
    
    #撤销:
    情况1:没有add
        git checkout -- index.html  #工作区的修改全部撤销
    情况2:已经add了,但没有commit
        第1步:git reset HEAD index.html  #把暂存区的修改撤销掉
        第2步:git checkout -- index.html 
    
    
    #删除:
    情况1:误删除的这样找回
        git checkout -- index.html 
    情况2:彻底删除
        第1步:git rm 1.txt
        第2步:git commit -m 'del 1.txt'
        
        
        
    #分支:默认在master分支
    cd blog
    git branch dev  #创建新分支,即拷贝一份当前所在分支代码到新分支
    git checkout dev  #切换到dev分支
    git branch #查看当前分支
    git branch -d 分支名称  #删除分支
    
    
    git checkout master #切换回master分支
    git merge dev #将dev分支内容合并到master分支
    切换分支再合并
    
    
    #遇到bug:
    git checkout master #切换回master分支
    git branch bug #创建bug分支
    git checkout bug #切换到bug分支
    git add .
    git commit -m '修bug'
    
    git checkout master #切换回master分支
    git merge bug #将bug分支内容合并到master分支,表示bug修复完毕,可以上线
    
    git checkout dev #切换回dev分支,继续开发, 
    ...
    git add .
    git commit -m '开发完毕'
    
    git checkout master #切换回master分支
    git merge dev #将dev分支内容合并到master分支
    ##产生冲突 CONFLICT(content):Merge conflict in ...
    手动解决冲突
    git add.
    git commit -m '解决bug和新功能冲突'
    
    
    
    ############SSH Key
    ssh-keygen -t rsa -C "youremail@example.com"   #创建SSH Key,一路回车即可
    git remote add origin git@github.com:silencio9/blog.git # 添加远程仓库(起一个别名origin) 
    或者 git remote add origin https://github.com/silencio9/blog.git
    
    
    #出现fatal:remote origin already exists.的解决方案
    第1步:git remote rm origin
    第2步:git remote add origin git@github.com:silencio9/blog.git # 添加远程仓库
    
    
    git push -u origin master  #master分支推到远程  (-u可加可不加)
    git push -u origin dev     #dev分支推到远程  (-u可加可不加)
    
    # 第一次推会出现:Are you sure you want to continue connecting(yes/no)?  输入yes
    git push origin master  #只要本地做了提交,就可以通过此命令推到远程
    
    
    #公司
    克隆远程库:
    cd e:
    git clone https://github.com/silencio9/blog.git(内部已实现git remote add origin 远程仓库地址)
    
    
    git checkout dev #切换回dev分支,继续开发, 
    git merge master #让dev分支合并master []
    ...
    git add .
    git commit -m '在公司开发的a.txt'
    git push origin dev #提交到远程
    
    
    #回到家继续写代码
    git checkout dev # 切换到dev分支
    git pull origin dev # 从远程dev分支拉取代码
    ...
    git add .
    git commit -m '在家开发的b.txt'
    git push origin dev  #提交到远程
    
    #到公司继续
    git pull origin dev # 从远程dev分支拉取代码
    ...
    git add .
    git commit -m '开发完毕'
    
    
    #上线
    1.将dev分支内容合并到master分支
    git checkout master
    git merge dev
    git push origin master  #提交到远程
    
    2.把dev分支也推送到远程
    git checkout dev
    git merge master
    git push origin dev
    
    
    
    ##################rebase######################
    rebase:使git记录简洁【不要把push到仓库的也合并】
    多个记录整合成一个记录
    
    ####情况1:
    git rebase -i 版本号
    git rebase -i HEAD~3
    
    
    ####情况2:dev分支变基:
    第1步.git checkout dev
    第2步.git rebase master
    第3步.git checkout master
    第4步.git merge dev
    第5步.git rebase -i 版本号
    
    
    ####情况3:忘记提交到远程仓库
    git fetch origin dev #远程到版本库
    git rebase origin/dev #版本库到工作区
    
    ####rebase冲突,和merge冲突一样的解决方式,最后加上git rebase --continue
    git rebase master
    ...
    git add .
    git rebase --continue
    git log 
    
    #######################################
    git pull origin dev    #会产生分叉
    等同于
    git fetch origin dev #远程到版本库
    git merge origin/dev (分叉)或 git rebase origin/dev  (不分叉)#版本库到工作区
    
    
    git log --graph #图形显示
    git log --graph --pretty=format:"%h %s" #图形简洁显示
    
    
    ######快速解决冲突
    1.安装beyond compare
    2.在git中配置
        git config --local merge.tool bc3
        git config --local mergetool.path 'D:\bcomp'
        git config --local mergetool.keepBackup false
    3.应用beyond compare解决冲突
        git mergetool 
        
    
        
    #####
    git tag -a v1 -m '第一版' #打标签
    git push origin --tags #推送
    
    ###########多人协同开发 在dev分支上新建分支
    #开发成员
    git checkout dev
    git checkout -b bubu  #创建bubu分支并切换到bubu分支
    ...
    git add .
    git commit -m 'bubu开发完毕'
    git push origin bubu
    
    ###########代码review(pull request)
    给master和dev分支添加rule
    
    
    ##远程仓库
    bubu: New pull request
    bubu分支--->dev分支
    ...
    
    #测试人员
    git checkout dev
    git checkout -b release
    git push origin release
    
    ##远程仓库
    release: New pull request
    release分支--->master分支
    
    
    ##本地
    git checkout dev
    git merge release
    git branch -d release
    
    
    ##master分支
    git checkout master
    git pull origin master
    git tag -a v2 -m '第2版' #打标签
    git push origin --tags #推送
    
    
    ##给开源软件贡献代码
    1.fork源代码
    将别人源代码拷贝到我自己的远程仓库
    2.在自己的仓库进行修改
    3.给源代码的作者提交修复bug的申请 pull request
    
    ##其他
    配置文件
    1.项目配置文件:项目/.git/config
    git config --local user.name 'bubu'
    git config --local user.email '343@qq.com'
    
    git remote add origin 地址    默认添加到本地配置文件中
    
    2.全局配置文件: ~/.gitconfig   当前用户的家目录下
    git config --global user.name 'bubu'
    git config --global user.email '343@qq.com'
    
    3.系统配置文件:/etc/.gitconfig  需要有root权限的
    git config --system user.name 'bubu'
    git config --system user.email '343@qq.com'
    
    ##免密登录:
    1.URL中体现(在项目配置文件中修改)
    原来的地址:https://github.com/wupeiqi/dbhot.git
    修改的地址:https://用户名:密码@github.com/wupeiqi/dbhot.git
    git remote add origin https://用户名:密码@github.com/wupeiqi/dbhot.git
    git push origin master
    
    2.SSH实现
    A:生成公钥和私钥(~/.ssh/id_rsa.pub)
        ssh-keygen -t rsa -C "youremail@example.com"
    B:拷贝公钥的内容,并设置到GitHub中
        git remote add origin git@github.com/wupeiqi/dbhot.git
    
    3.git自动管理凭证
    
    
    ##git忽略文件(让Git不再管理当前目录下的某些文件)
      以斜杠“/”开头表示目录;
      以星号“*”通配多个字符;
      以问号“?”通配单个字符
      以方括号“[]”包含单个字符的匹配列表;
      以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
    
        *.h
        !a.h  排出
        .gitignore
        files/
    
    ##任务管理相关
    issues 文档以及任务管理
    wiki 项目文档说明描述
    
        
    View Code
    # Byte-compiled / optimized / DLL files
    
    .idea/
    local_db.sqlite3
    
    __pycache__/
    *.py[cod]
    *$py.class
    
    # C extensions
    *.so
    
    # Distribution / packaging
    .Python
    build/
    develop-eggs/
    dist/
    downloads/
    eggs/
    .eggs/
    lib/
    lib64/
    parts/
    sdist/
    var/
    wheels/
    pip-wheel-metadata/
    share/python-wheels/
    *.egg-info/
    .installed.cfg
    *.egg
    MANIFEST
    
    # PyInstaller
    #  Usually these files are written by a python script from a template
    #  before PyInstaller builds the exe, so as to inject date/other infos into it.
    *.manifest
    *.spec
    
    # Installer logs
    pip-log.txt
    pip-delete-this-directory.txt
    
    # Unit test / coverage reports
    htmlcov/
    .tox/
    .nox/
    .coverage
    .coverage.*
    .cache
    nosetests.xml
    coverage.xml
    *.cover
    *.py,cover
    .hypothesis/
    .pytest_cache/
    cover/
    
    # Translations
    *.mo
    *.pot
    
    # Django stuff:
    *.log
    local_settings.py
    db.sqlite3
    db.sqlite3-journal
    
    # Flask stuff:
    instance/
    .webassets-cache
    
    # Scrapy stuff:
    .scrapy
    
    # Sphinx documentation
    docs/_build/
    
    # PyBuilder
    .pybuilder/
    target/
    
    # Jupyter Notebook
    .ipynb_checkpoints
    
    # IPython
    profile_default/
    ipython_config.py
    
    # pyenv
    #   For a library or package, you might want to ignore these files since the code is
    #   intended to run in multiple environments; otherwise, check them in:
    # .python-version
    
    # pipenv
    #   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
    #   However, in case of collaboration, if having platform-specific dependencies or dependencies
    #   having no cross-platform support, pipenv may install dependencies that don't work, or not
    #   install all needed dependencies.
    #Pipfile.lock
    
    # PEP 582; used by e.g. github.com/David-OConnor/pyflow
    __pypackages__/
    
    # Celery stuff
    celerybeat-schedule
    celerybeat.pid
    
    # SageMath parsed files
    *.sage.py
    
    # Environments
    .env
    .venv
    env/
    venv/
    ENV/
    env.bak/
    venv.bak/
    
    # Spyder project settings
    .spyderproject
    .spyproject
    
    # Rope project settings
    .ropeproject
    
    # mkdocs documentation
    /site
    
    # mypy
    .mypy_cache/
    .dmypy.json
    dmypy.json
    
    # Pyre type checker
    .pyre/
    
    # pytype static type analyzer
    .pytype/
    
    # Cython debug symbols
    cython_debug/
    
    # static files generated from Django application using `collectstatic`
    media
    static
    .gitignore
  • 相关阅读:
    当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗?
    当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗
    重写后的方法与被重写的方法的返回值一样吗?
    java中,一个类实现某个接口,必须重写接口中的所有方法吗
    java方法重写返回值类型
    field
    JAVA父类引用指向子类的对象意思
    io模型
    操作系统面试题整理
    java并发问题
  • 原文地址:https://www.cnblogs.com/bubu99/p/10684933.html
Copyright © 2020-2023  润新知