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就不会出现这种分叉情况

原文地址:https://www.cnblogs.com/longyunfeigu/p/9394971.html