Git 简易食用指南 v2.0
写在前面
一开始我们先聊一聊版本控制,什么是版本控制呢?
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。具体大类分为:
- 本地版本控制系统
- 集中式版本控制系统SVN
- 分布式版本控制系统 Git
Why Git ?
为什么我们要食用 Git 呢?来看看他的优势吧!
Git 诞生于2005,Linux开源社区
- 速度
- 简单的设计
- 允许上千个并行分支
- 分布式
都是他的优点。
在进行简单的介绍之后,接下来我们就可以开始进行食用了。
下载、安装和配置
去到https://git-scm.com/官网下载即可
![](https://upload-images.jianshu.io/upload_images/12904618-aaa882754cecaec7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
在终端中使用 git --version
查看git的版本
![](https://upload-images.jianshu.io/upload_images/12904618-765f8f11e3971b7b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/375)
使用 git config --global user.name ""
和 git config --global user.email ""
创建用户和邮箱
使用 git config --list (或git config -l)
查看用户列表
![](https://upload-images.jianshu.io/upload_images/12904618-bcd731e471afcc9e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/550)
![](https://upload-images.jianshu.io/upload_images/12904618-57076ee335ccf4f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/270)
创建"仓库"
![](https://upload-images.jianshu.io/upload_images/12904618-cb89906ce3c9fb42.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/575)
在IDEA的Terminal中直接输入git init
用ls -la
查看就发现了目录文件下面已经存在了.git的文件,这些文件是隐藏的。
使用git init
直接加名称,在创建文件的同时进行"仓库"的搭建
![](https://upload-images.jianshu.io/upload_images/12904618-ad431d1702f5242c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/587)
或者从github上直接克隆、下载到git
复制地址之后 使用git clone https://github.com/xxxxx
进行克隆到本地
![](https://upload-images.jianshu.io/upload_images/12904618-021f12885a7016a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/608)
基本用法
git status ==> 查看仓库状态
下图显示No commits yet
,说明还没有历史节点,并说明了以下文件都属于比较危险的状态
所以我们需要进行新建
![](https://upload-images.jianshu.io/upload_images/12904618-f991bc7b7d138387.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/523)
![](https://upload-images.jianshu.io/upload_images/12904618-31d5c48519699c78.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/498)
git add . ==> 将所有文件添加至暂存区
之后再次使用git status
命令查看状态,发现之前红色的文件都变色了,说明他们暂时安全了
![](https://upload-images.jianshu.io/upload_images/12904618-5aa11f71b817ef74.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/403)
git commit -m "版本描述" ==> 提交版本或备注描述信息
在提交完版本描述之后,我们再次使用git status
查看状态,提示我们nothing to commit,working tree clean
。说明所有的更改都保存了
在这个时候,也说明。我们已经有一颗"后悔药"了!,即是我们已经有一个可回溯节点了。
![](https://upload-images.jianshu.io/upload_images/12904618-1f36639255ed50d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/459)
git log ==> 查看详细日志信息
git log -p
可以查询具体修改了什么
在输入 git log
之后,我们可以看到 commit 之后有很长一段字符,可以理解为这个节点的"名字"、"身份证号",用来绝对定义这个节点。
![](https://upload-images.jianshu.io/upload_images/12904618-b6957acf78f16aa3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/541)
回溯!吃"后悔药"!
git reset --hard 456ba1a84e007da35e5e611737aeec9de2581932
(commit后面的"身份证",ps:7位以上即可)
![](https://upload-images.jianshu.io/upload_images/12904618-46565a6e833d7f2c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/462)
如上图,我希望将 blog demo v1.2 版本的代码回溯到 v1.1 的时候
输入 git reset --hard 456ba1a84e007da35e5e611737aeec9de2581932
之后可以看到提示
HEAD is now at cca2043 blog demo v1.1
版本
![](https://upload-images.jianshu.io/upload_images/12904618-db4f1ff19977864e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/610)
点击Version Control也可以查看版本间的区别和改动
![](https://upload-images.jianshu.io/upload_images/12904618-f507d17e0a90cc77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
如果有文件被误删掉,可以使用git checkout
来找回
git checkout xxx
(误删的文件名)
三种状态
![](https://upload-images.jianshu.io/upload_images/12904618-d145d8de33488755.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/434)
modified 已修改 ==> staged 已暂存 ==> committed 已提交
staged 是缓冲阶段,以防错误引入了较大的文件,防止错误的引入
![](https://upload-images.jianshu.io/upload_images/12904618-f51ff0f8020498d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/447)
tag标签
我们的代码版本,有小修小改的过程,但当我们的代码大版本确立的时候,就相当于一个里程碑节点,这个时候就需要tag标签用来注解
git tag -a 标签名 -m "备注"
并使用 git tag
查看有多少tag标签
使用git show
查看 tag 标签的详细信息,诸如是谁添加的,添加了什么内容等
![](https://upload-images.jianshu.io/upload_images/12904618-6c877e3ee9f39457.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/440)
如果之前有小的版本我也想用来添加tag标签,但他们的时间节点已经是过去式了,怎么办呢?
这时使用 git tag -a v0.5 -m "备注" + "身份证号"
可以给之前历史记录的回溯节点添加tag标签
我们也可以使用 git checkout v1 来回溯名称为v1的tag标签节点
分支与合并分支
类似于在不同的时间线创造一个平行世界,在一个节点创造出一个分支
使用 git branch "分支名称"
创建分支
在项目中,需要进行分支开发之后再整合功能的时候需要用到分支
分支也可以用来处理一个节点的 bug 问题,找到中间的节点 不影响后面正在开发的时间线,可以用来"救火"
![](https://upload-images.jianshu.io/upload_images/12904618-bfe17c9433e4a9f3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/230)
在 master下使用 git merge "分支名"
用来合并分支
然后需要在IDEA中手动删除多余的关于提示的代码 "========="
分支 救火之前...
![](https://upload-images.jianshu.io/upload_images/12904618-28fb728d658afa18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/448)
合并分支 救火之后...
![](https://upload-images.jianshu.io/upload_images/12904618-f14847c44b3447b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/692)
远程仓库
在 local 本地创建一套仓库,并且在很远很远的其他地方远程备份另一套仓库,内容都是一样的,甚至可以在添加后续节点的时候,也一样同步过去。
![](https://upload-images.jianshu.io/upload_images/12904618-9080508ce21f17f2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
在github上我们创建一个远程仓库 并获得一个url地址
![](https://upload-images.jianshu.io/upload_images/12904618-d63115e571f326d1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/456)
![](https://upload-images.jianshu.io/upload_images/12904618-d20d475c2238cc1f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](https://upload-images.jianshu.io/upload_images/12904618-5ccedb19bfcc9044.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
git remote add "远程名称" "远程地址url"
例如这里 我们使用 git remote add github https://github.com/evenyao/easy-blog-demo.git
git remote 可以显示所有连接的远程仓库
![](https://upload-images.jianshu.io/upload_images/12904618-480e62f12040a4df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
使用 git push -u "远程名" "分支名"
上传代码
并确认github用户名/密码
![](https://upload-images.jianshu.io/upload_images/12904618-77ffa730940ee41c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/524)
然后我们刷新 github 页面,发现代码已经上传上去了,也可以看到之前我们创建的仓库版本
![](https://upload-images.jianshu.io/upload_images/12904618-cb6a68f73cb10015.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
然后在需要容灾的时候 使用 git clone "远程仓库url" 进行拷贝
多人远程协作
git clone "远程仓库url" "用户标记"
例如git clone https://github.com/evenyao/easy-blog-demo.git even
git clone https://github.com/evenyao/easy-blog-demo.git root
在 even 和 root 的协作过程当中,even修改了文件,添加了工程中的一项代码
在even进行git add. && git commit -m "v1.1"
添加版本上传之后,root需要使用 git pull 将even修改之后代码拖下来
然后再次进行修改,并也使用git add. && git commit -m "v1.2"
添加版本上传之后,even之后也使用 git pull 将root修改的代码拖下来
SSH
当我们创建一个新github项目,也可以使用https地址作为克隆的站点地址
另外一种方式就是SSH,但这种方法必须要进行私钥公钥的配置
![](https://upload-images.jianshu.io/upload_images/12904618-ef578935f8820c68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
我们先点击头像 选择Settings
![](https://upload-images.jianshu.io/upload_images/12904618-23fe01029227af2f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/195)
选择左边栏个人设置中的SSH and GPG keys
![](https://upload-images.jianshu.io/upload_images/12904618-c72fb341c0d211c1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/245)
在 SSH keys 中 可以点击 generating SSH keys 查看指引
新建 则是选择 New SSH key
![](https://upload-images.jianshu.io/upload_images/12904618-d96b9dd51bca10c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
在Generating a new SSH key and adding it to the ssh-agent中可以查看完整的创建流程
![](https://upload-images.jianshu.io/upload_images/12904618-b703c8a94e4467c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
创建流程指引
![](https://upload-images.jianshu.io/upload_images/12904618-5fb094eccf878673.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
演示操作
使用ssh-keygen -t rsa -b 4096 -C "invictus@vip.qq.com"
开始进行设置流程
![](https://upload-images.jianshu.io/upload_images/12904618-f10c595d9da6fd5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/565)
创建完毕之后我们 cd
到这个目录 ls
查看当前 .ssh 文件夹下面的文件 显示有 id_rsa
和 id_rsa.pub
![](https://upload-images.jianshu.io/upload_images/12904618-5eeb4ae8f305371b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/322)
使用cat id_rsa.pub
命令显示出公钥的相信信息
并将下面的公钥全部复制
![](https://upload-images.jianshu.io/upload_images/12904618-47e97f8a84802e8c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/566)
将其粘贴到 SSH key 栏中,然后选择 Add SSH key (当然也不要忘了添加Title)
![](https://upload-images.jianshu.io/upload_images/12904618-169c2af334d7a1c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
这样一个 SSH key 就算添加完成了
我们也可以通过 git 进行ssh的 clone 和 push了
![](https://upload-images.jianshu.io/upload_images/12904618-c4d095921592de68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
转载于:https://www.cnblogs.com/evenyao/p/9231424.html
Git 简易食用指南 v2.0相关推荐
- 信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...
近期,中国新闻技术工作者联合会正式发布<报业网络安全等级保护定级参考指南V2.0>. 该指南由中国新闻技术工作者联合会组织网络安全领域的专家.报业技术专家以及业务专家经过多次调研.学习.探 ...
- 《Windows Phone 7 用户界面设计和交互指南 v2.0》
微软 Windows Phone 团队今天发布了<Windows Phone 7 用户界面设计和交互指南 v2.0>(UI Design and Interaction Guide for ...
- 信息安全技术网络安全等级保护定级指南_报业网络安全等级保护定级参考指南V2.0发布...
近期,<报业网络安全等级保护定级参考指南V2.0>正式发布. 该指南由中国新闻技术工作者联合会组织网络安全领域的专家.报业技术专家以及业务专家经过多次调研.学习.探讨后,在原<报业网 ...
- 百度官方SEO搜索引擎优化指南V2.0版本发布
百度互联网创业俱乐部发布了<百度SEO搜索引擎优化指南V2.0>版本了,大家快来下载, 较之第一个版本的基础知识介绍,第二个版本更注重了网站性能和网站可用性,以及网站运营,数据分析方面, ...
- 已在页面完全加载前强制排版_公众号写作排版指南v2.0(适配Dark Mode)
微信的 iOS 版已经适配了 Dark Mode,Android 的深色模式也正在内测中,夜间使用微信的体验将大大提升. 公众号文章是由用户自定义图片,文字颜色,排版等等,很难做到完全适配.这使得当浏 ...
- 简易计时器编写 V2.0
JS编写一个简易计时器程序. 要求: (1)页面包含一个"开始"按钮,一个"停止"按钮,一个"清零"按钮以及一个用于显示时间的文本框. (2 ...
- 半年的心血,《PyCharm中文指南》 v2.0 版本,可以发布了
大家好,我是明哥. 去年 9 月份,我花了两个月的时间,整理发布了第一版的 <PyCharm 中文指南>,初衷是为了帮助那些刚入门 Python,却被 PyCharm 这个庞然大物被劝退的 ...
- Git和GitHub学习笔记 V2.0(更新中...)
文章目录 1. 什么是Git? 2. 为什么要使用Git? 3. Git和Svn的区别 4. Git的历史 5. 版本控制工具应该具备哪些功能 6. 安装Git 7. Git的三区和三种状态 8. G ...
- git 简易指南+常用命令
git 简易指南 git 常用命令 ----------------------------------------------------------- ...
最新文章
- LabVIEW保存、读取配置文件
- c matlab 混合编程 调试,64位MATLAB和C混合编程以及联合调试
- 局部变量和成员变量的初始值问题
- 机器学习与流体动力学:谷歌AI利用「ML+TPU」实现流体模拟数量级加速
- [网络安全自学篇] 三十六.WinRAR安全缺陷复现(CVE-2018-20250)及软件自启动劫持机理
- C语言 · 前10名
- linq判断集合中相同元素个数_iOS开发swift语法梳理:集合Set
- php报表数据打印机,通过打印机打印带打印功能的php表
- ​马卡龙配色你好夏天PPT模板​
- 设计PNG免抠素材|提高调性!透明液态气泡免扣素材
- Docker部署微服务应用的架构设计
- sublime Text3下sass环境配置(windows)
- 学习vim: 常用命令
- 面试必掌握之计算机网络
- 搜狗输入法 android2.3,搜狗输入法安卓版
- 银联支付证书下载及导出流程(带图)
- erc20根据合约地址获取所有交易记录
- 数据可视化_EChat
- 卡塔兰数(Catlan)
- PostgreSQL 修改用户密码
热门文章
- 两道概率题-供大家周末把玩
- html可以导入MySQL吗_将数据从HTML文件(带有嵌入式JavaScript)导入MySQL数据库
- 新元素之video,audio,meter,datalist,keygen,output
- 一个简单json数据提交实例
- qt creator 信号与槽 代码实现 (二)
- java 空指针异常(java.lang.NullPointerException)
- Python 数据结构视频教程三
- golang中的strings.IndexAny
- windows下进程间通信的(13种方法)
- mybaits十八:内置标签