• Git和github


    了解

    git是一个版本管理的软件,这个软件可以通过可视化的客户端来使用,也可以通过这个软件配套的命令来使用。
    github是一个代码托管平台,从本质上来说,git和github没有任何关系,但是基本上很多代码托管平台可以通过git的语法来管理

    先把目录管理起来

    学习git的第一步是先把我们创建的程序目录管理起来。

    初始化

    git init     -- 会在当前目录创建一个隐藏的.git文件夹,这个文件夹不可以删除,git的使用全指望它
    git status    -- 查看当前目录所有文件状态
    git add .     -- 把红色的变绿色
    git commit -m '第一次提交'     -- 把绿色变成透明色,第一次使用commit相当于把所有文件又拷贝一份放到别地
    

    更改目录文件

    初始化后更改目录文件内容,如templates/index.html文件,原先是

    现在是

    执行下面操作

    git status      -- 发现index.html标记为红色
    git add .
    git commit -m '新增linux'
    

    然后再修改内容,如下

    执行下面操作

    git status      -- 发现index.html标记为红色
    git add .
    git commit -m '新增java'
    

    现在第一个问题来了,想回到新增java之前的版本,如下操作

    内容回到

    第二个问题,又想回到有java的版本,执行

    此时发现git log中没有新增java的版本,因为默认git log查看的是当前版本及之前的版本,这时候需要用到git reflog

    这时内容变为

    第三个问题,如果我修改了index.html文件,但是没有add,或者add之后没有commit,那想回到修改之前的状态,参考下面图例

    代码上线之后出bug解决办法之stash

    先回到初始状态

    这个代码已经在线上运行了,紧接着开发新功能linux,开发到一半

    这时候php代码需要修改,如果此时commit之后再去修改,那么linux的半残品就会被用户使用。所以应该先把新增的代码保存到一个地方,去修改php的bug,修改完成之后再把新增的linux的一般代码拿过来
    先执行git stash此时内容如下

    修改bug如下

    重复add和commit的操作

    通过 git stash pop 把新增的linux内容拿回来,因为显式地修改了<li>php</li>这一行的代码,有stash储存的这一行发生冲突.如果新增或删除基本就不会出现冲突,其实出现冲突也不要紧,手动更改冲突并add和commit即可

    stash相关常用命令:
    git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    git stash list 查看“某个地方”存储的所有记录
    git stash clear 清空“某个地方”
    git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
    git stash drop 编号,删除指定编号的记录

    代码上线之后出bug解决办法之branch

    看两幅图

    在平常的开发中,一般master分支不做改动,仅仅用来合并其他分支的代码,要想新增功能或者修改bug需要创建其他分支,开发完毕或者bug修改完成之后删除相应分支即可。分支的好处是可以多个人并行开发,然后再合并到master分支。先让一切回归初始状态

    创建dev分支并新开发linux功能,开发到一半,此时内容为

    git branch dev
    git checkout dev
    git add .
    git commit -m 'linux开发到一半'
    


    这时候php出现bug了,要修改bug。创建bug分支修改bug,注意:需要在master分支去创建bug分支,这样bug分支拷贝的就是master里的内容,如果在已经开发的dev分支去创建bug分支,那么bug分支拷贝的就是dev分支的内容

    切换到master分支去合并

    此时master内容为

    然后切换到dev分支继续开发linux,开发完成合并到master


    此时文件内容为

    注意:git merge 时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交,此处不再敖述。

    branch相关常用命令:
    git branch 分支名称 创建分支
    git checkout 分支名称 切换分支
    git branch -m 分支名称 创建并切换到指定分支
    git branch 查看所有分支
    git branch -D 分支名称 删除分支
    git merge 分支名称 将指定分支合并到当前分支,一般是切换到主分支再合并其他分支

    github托管

    单人开发

    单人开发,可能公司和家里都有电脑可以开发,每次把代码进行来回拷贝是一件麻烦事,所以考虑把代码放在一个第三方平台,通过这个第三方平台做代码寄存中转站。
    去github注册一个账号,然后创建一个repository,其实就可以理解为放代码的文件夹,创建完成之后里面是空内容,但是有一些提示信息

    git remote add origin https://github.com/longyunfeigu/nj.git
    git push -u origin master
    git branch dev    -- 创建dev开发分支并把dev推送到github
     git checkout dev
    git push origin dev
    

    此时github具有两个分支

    回到家,打开电脑,创建空文件夹



    在家开发功能之后add commit之后还有一步操作git push origin dev.回到公司第一步是切换到dev分支并把家里开发的代码拉下来`git pull origin dev',然后继续开发。
    现在问题来了,如果在家新增了一个py的代码没有push到github该咋办?回到公司,先pull内容之后,继续新增一个py文件


    回到家之后第一件事是拉代码,此时合并会出现下面问题

    git pull origin dev的操作相当于两部分git fetch origin devgit merge origin/dev,这种情况会出现分叉,如果使用git fetch origin devgit rebase origin/dev就不会出现这种分叉情况

  • 相关阅读:
    P1880 [NOI1995]石子合并
    LC 1388. Pizza With 3n Slices
    1129 Recommendation System
    1131 Subway Map
    C#中的lamda实用的select用法
    C# Image与Base64编码互转函数
    签名算法的URL
    xml格式封装数据
    layer 相关网址
    js-清空array数组
  • 原文地址:https://www.cnblogs.com/longyunfeigu/p/9394971.html
Copyright © 2020-2023  润新知