github和git

Github

Shadowsocks翻墙神器
仓库(Repository)
仓库即你的项目,想在github上开源一个项目就必须新建一个Repository,如果开源的项目多了,就有了多个Repository

复制克隆项目(Fork)
李四fork张三仓库,则克隆一个一模一样的张三的项目,且该fork项目是独立存在的
在这里插入图片描述
发起请求(pull request)
如果李四更新一个a1.php文件,同时发送请求给张三。张三查看后觉得不错会合并到原仓库中
在这里插入图片描述
关注(watch)
关注一个项目,只要这个项目有任何更新都会第一时间收到这个项目的通知提醒
事务卡片(issue)
发现bug需要讨论
github说明图
在这里插入图片描述
搭建个人网站
点击new repository,名称必须是用户名+github.io
在这里插入图片描述
创建一个index.html文件,即可有个人主页
在这里插入图片描述
项目站点
https://用户名.github.io/仓库名
在这里插入图片描述

Git

Git Repository(Git仓库)(提交区)
最终确定的文件保存到仓库,成为一个新版本,并对别人可见
暂存区
暂存已经修改的文件最后统一提交到git仓库中
工作区(工作目录)
添加、编辑、修改文件等动作
在这里插入图片描述
基本信息设置
在这里插入图片描述
git config --list查看所有配置信息
初始化仓库
git init ——生成.git文件
向仓库中添加文件
touch a1.java——创建一个文件
git add a1.java——添加文件到暂存区,添加所有文件git add .
git commit -m ‘add a1.java’——提交文件到仓库
配置忽略文件
如果调用 git add .则会添加所有文件,可以配置.gitignore配忽略匹配文件
在这里插入图片描述
修改仓库
vi a1.java——修改文件
cat a1.java——查看文件
git status——查看状态
git add a1.java——修改文件到暂存区
git commit -m ‘提交修改的项目’——提交到仓库
删除文件
git rm --cached——仅从暂存区删除
git rm a1.java——从暂存区与工作目录中删除文件
git commit -m ‘通过git删除仓库文件’——提交
查看历史信息
git log——查看提交信息
git log --online——简化信息
显示版本差异
git diff
将文件内容从暂存区复制到工作目录
git checkout – file
在这里插入图片描述
撤销暂存区内容
在这里插入图片描述
撤销全部改动
在这里插入图片描述
总结一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Git克隆操作
将远程仓库中的项目复制到本地
git clone 仓库地址 —— 仓库地址

克隆之后同样是add到暂存,然后commit提交到仓库,最后push到远程仓库:

Git推送
git push
在这里插入图片描述

实际项目开发中分支的概念和用法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果线上发现bug,则创建hotfix分支进行修复,并合并回development分支
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分支操作

在这里插入图片描述
git checkout 分支切换
在这里插入图片描述
在这里插入图片描述
假设场景下的各步命令(连续的步骤,关键看head在谁的上面,箭头是指针):
在这里插入图片描述
注意下图git commit是从c4006ec到5751363
在这里插入图片描述
回到master分支
在这里插入图片描述
在这里插入图片描述
*是当前所属分支
在这里插入图片描述
在这里插入图片描述
此时分支没有任何变化
在这里插入图片描述
git reset 回退分支
在这里插入图片描述
git reset --mixed e39d0b3,该命令会将数据恢复到暂存区
在这里插入图片描述
git reset --hard e39d0b3,该命令会将数据恢复到暂存区和工作区
在这里插入图片描述
git reset --soft e39d0b3,该命令会将数据恢复到暂存区和工作区,那1f2f476分支就丢失了
在这里插入图片描述
每次使用分支的hash号很麻烦,可以使用捷径:
在这里插入图片描述
reset和checkout区别
需要注意的是,前面提到的分支操作都是commit操作,而reset和checkout还可以对文件进行file操作
在这里插入图片描述
注意第三列,是否移动HEAD或branch。file操作是都不会移动HEAD和branch的。
在这里插入图片描述
checkout是不会改变分支的,只会对HEAD进行移动。在file操作中,reset修改的是暂存区,checkout修改的是工作目录。
在这里插入图片描述
checkout会遇到当前工作目录还未提交,无法切换分支的error,因此需要stash
git stash
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从stash中删除用stash drop
在这里插入图片描述
git merge 合并分支
当前场景,最终提交节点为c4fe238
在这里插入图片描述
通过下面命令可以看到merge后的分支关系
在这里插入图片描述
merge会产生冲突,例如下图是test.md
在这里插入图片描述
并不是每个merge都会有冲突,下图就不会有冲突
在这里插入图片描述
通过下面合并可以发现是一个线性合并
在这里插入图片描述
但是我们不希望这样(不希望fast forward快速向前合并),我们希望知道在哪里merge了master分支,添加–no-ff参数
在这里插入图片描述
这样就跟普通的merge相同了
在这里插入图片描述
git rebase
在这里插入图片描述
注意这张变基后的图
在这里插入图片描述
例如以下场景
在这里插入图片描述
首先rebasehi找到以下三个节点
在这里插入图片描述
之后rebase会找到共同节点c400和两个分支节点c4f和042之间的提交记录,让这个提交在master分支上重演!
在这里插入图片描述
注意下面HEAD和feature分支的变化
在这里插入图片描述
这样提交的历史就变成线性,因为feature分支上的每一步都是线性的和master合并,从而得到最终的feature分支
还可以选择feature分支中的单独一个部分重演,例如让575以后分支在master上重演
在这里插入图片描述
这样红色的575就被抛弃
在这里插入图片描述
rebase和merge区别,merge可以很清楚的看到分支的合并情况。
在这里插入图片描述
千万不要在master分支上使用rebase
在这里插入图片描述
git tag
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

资料

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wujingchangye/article/details/85408284