Git、Github习笔记01——Git本地仓库
作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明。谢谢!
git简介
版本控制软件,由Linus(linux开发者)开发,最初用来对linux进行版本控制。
git优势
- 大部分在本地完成,不需要联网(在本地安装软件,实现版本控制,本地保存完整的数据)
 - 完整性保证(每次版本控制进行hash计算保证程序的完整性)
 - 尽可能的添加数据而不是删除或修改数据(每次保存新的版本,不会删除原来的版本)
 - 分支操作非常快捷路畅(内部以快照的形式管理,分支其实就不同的指针,切换或创建快照就是对指针的操作)
 - 与linux命令全面兼容(显然,同一人开发的)
 
git安装
- 官网地址:https://git-scm.com
 - 安装:在安装向导中,Adjusting your PATH environment选项中选择Use Git from Git Bash only,意思是只在Git Bash中使用Git,选择该项的原因是这种方式使用Git就足够了。其他直接下一步。

 
Git本地结构:工作区、暂存区、本地库。
- 工作区:写代码
 - 暂存区:临时存储
 - 本地库:历史版本
 - git add命令:工作区--->暂存区
 - git commit命令:暂存区--->本地库
 
Git和代码托管中心
局域网下:
- GitLab服务器(可自己搭建)
 
外网:
- 码云(国内)
 - github(国外)
 
本地库和远程库
团队内部协作
- 本地库--->远程库:push(其他成员需要加入团队才能push)
 - 远程库--->本地库:clone,pull
 
跨团队协作
- 远程库--->远程库:fork,pull request->(审核)->merge
 
Git命令操作
本地库初始化
- 命令:git init
 - 效果:会在当前目录创建一个.git文件夹(隐藏目录)并会在.git中创建一些文件和文件夹。
 - 注意:.git目录中不要修改和删除。
 
设置签名
- 形式:用户名+email地址。
 - 作用:区分不同开发人员。
 - 辨析:这里的签名与代码托管中心代码账号和密码无关。
 - 命令:
- 项目级别/仓库级别(项目文件夹下的级别)
- git config user.name 名字
 - git config user.email 用户email
 
 - 系统用户级别(操作系统用户下的级别)
- git config -global user.name 名字
 - git config -global user.email 用户email
 
 - 优先级:项目级别优先于系统用户级别;如果只有系统用户级别,才采用系统用户级别,否则采用项目级别;不允许二者都没有的情况。
 - 用户名和email保存位置:
- 项目级别:.git/config;
 - 系统用户级别:用户家目录下.gitconfig
 
 
 - 项目级别/仓库级别(项目文件夹下的级别)
 
命令
git status:查看状态
git add:将工作目录文件提交到暂存区
git rm --cached ...:将文件从暂存区移除
git commit:从暂存区提交到本地库(会进入VIM编辑器,要求输入提交的信息)
- git commit -m "消息" :-m命令可不用进入vim编辑器
 
git checkout -- ...:撤销当前修改
git reset HEAD ...:
git log:查看提交日志
- git log --pretty=oneline:每个记录显示一行
 - git log --oneline:显示更加简洁
 - git reflog:会显示指针移动到指定版本的步数
- 多屏显示控制方式
- 空格:向下翻译
 - b:向上翻页
 - q:退出
 
 
 - 多屏显示控制方式
 
版本前进后退
- 基于索引值操作
- git reset --head <版本索引>
 
 - 使用^符号:只能后退
- git reset --hard HEAD^:往后退一步
 - git reset --head HEAD^^:后退两步
 
 - 使用~符号:只能后退
- git reset --hard HEAD~n:后退n步
 
 
- 基于索引值操作
 git help [命令]:查看某个命令帮助
git reset 参数对比
- --soft参数:不会碰暂存区和工作区,仅仅是在本地库移动HEAD指针
 - --mixed参数:移动本地库HEAD指针,会重置暂存区,不会碰工作区,
 - --hard参数:移动本地库HEAD指针,会重置暂存区和工作区
 
删除文件后找回
- 使用git reset --hard [版本索引] 命令退回到之前的历史版本
 - 删除记录在暂存区没有提交到本地库,可以使用git reset --hard HEAD找回删除文件
 
比较文件差异
- git diff [文件名]命令:无参数时,工作区与暂存区比较。
 - git diff HEAD [文件名]:工作区与本地库对应的文件进行比较。
 - 不带文件名,则可比较多个文件。
 
git分支
什么是分支
在版本控制中,使用多条线同时推进多个任务。
分支举例
- master:主分支
 - feature_blue:blue分支
 - feature_red:red分支
 - hot_fix:热修复分支
 
master-->masterV1
feature_blue-->feature_blueV1
feature_red-->feature_redV1
feature_redV1-->feature_redV2
feature_blueV1-->masterV1
hot_fix-->masterV2
masterV1-->masterV2
masterV2-->masterV3
feature_redV2-->masterV3
分支的好处
- 同时并行推进开发多个功能,提高开发效率
 - 各个分支开发过程中,互不影响,一个分支开发失败,删除重新开始即可
 
命令
- git branch -v:查看所有分支
 - git branch [分支名]:创建分支
 - git checkout [分支名]:切换分支
 - 合并分支:
- 第一步:git checkout [被合并分支名](切换到被合并的分支)
 - 第二步:git merge [指定要合并到此分支的分支名字]
 
 - 解决分支冲突:
- 手动合并(修改文件,选择合并哪个)->git add [file]->git commit
注意:git commit命令后不可带文件名 
 - 手动合并(修改文件,选择合并哪个)->git add [file]->git commit
 
Git基本原理
哈希
- 加密算法,将明文加密为密文:
 
明文--加密算法-->密文
- 特点:
1.不管输入数据量多大,使用同一个加密算法,所得到的加密结果长度固定。
2.输入数据是确定的,输出数据也是确定的。
3.输入数据有细微的变化,输出数据也会有变化。
4.哈希算法不可逆。 
Git的文件管理机制
- 通过快照的方式进行,每个版本有一个快照,重复的文件有个指针指向前面的文件。
 - 每个文件会有一个哈希值。
 
Git分支管理机制
- 新建一个分支:新建一个指针指向之前的版本,而不是拷贝整个工程。
 - 切换分支:切换指针来切换到对应分支。
学习视频 B站视频:https://www.bilibili.com/video/BV1pW411A7a5 笔记 
Git、Github习笔记01——Git本地仓库的更多相关文章
- 【Git/GitHub学习笔记】基本操作——创建仓库,本地、远程同步等
		
近日想分享一些文件,但是用度盘又太麻烦了(速度也很恶心).所以突发奇想去研究了下GitHub的仓库,这篇文章也就是一个最最最基础的基本操作.基本实现了可以在GitHub上存储文本信息与代码. 由于我的 ...
 - git操作-如何把你的本地仓库放到GitHub已有仓库
		
本地: 首先在你的本地git init 初始化一个仓库,然后git add . 将所有的文件都打包到仓库中,git -commit -m "first_commit" 此时是没有什 ...
 - 初学git(一):创建本地“仓库”
		
初学git(一):创建本地“仓库” 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史.和其他版本控制的对比啥的,我就不说了.另外,我这里用的是Mac OS X ...
 - git/github学习笔记
		
郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...
 - git的学习笔记(二):git远程操作
		
1.创建ssh key ssh-keygen -t rsa -C "your_email@example.com" 执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公 ...
 - failed to push some refs to 'git@github.com:RocsSun/mytest.git
		
Git推送到GitHub仓库失败 使用Git将文件推送至GitHub的远程仓库时,报错failed to push some refs to 'git@github.com:RocsSun/mytes ...
 - failed to push some refs to 'git@github.com:cq1415583094/MyBatis.git'解决办法
		
将本地git仓库代码提交到GitHub上时,出现failed to push some refs to 'git@github.com:cq1415583094/MyBatis.git', 导致的原因 ...
 - [git/GitHub] git push 时报错:fatal: remote error: You can't push to git://github.com/user/xxx.git(已解决)
		
当使用 git push 时,提示以下错误: fatal: remote error: You can't push to git://github.com/user/xxx.git Use ht ...
 - failed to push some refs to 'git@github.com:xxx/xxx.git' 解决方法
		
此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master 但依然没能解决问题 会出现: failed to push some ref ...
 
随机推荐
- Springboot:IDEA重调安装依赖窗口(二)
			
Settings-Plugins 搜索Editstarters: 安装完插件 重启idea: 查看安装是否成功: 在pom.xml 右键: 选择热部署依赖 点击ok进行自动装配: 热部署依赖环境已经配 ...
 - Java中BigDecimal类
			
由于在运算的时候,float类型和double很容易丢失精度,演示案例,所以,为了能精确地表示.计算浮点数,Java提供了BIgDecimal BigDecimal类的概述 不可变的.任意精度的有符号 ...
 - curl发送多维数组
			
//通过curl模拟post的请求: function SendDataByCurl($url,$data=array()){ //对空格进行转义 $url = str_replace(' ','+' ...
 - MarkDown排版测试
			
1.标题设置 标题(大标题) 标题(小标题) 标题(一级标题) 标题( 二级标题) 标题(三级标题) 标题(四级标题) 备注:大标题与一级标题一样,小标题与二级标题一样,"#"前无 ...
 - 如何打开 Visual Studio 的 Dump,适用于调试 appcrash,exception
			
https://keithbabinec.com/2018/06/12/how-to-capture-and-debug-net-application-crash-dumps-in-windows/ ...
 - [Inno Setup] 执行程序,返回值不为0时提示用户
			
procedure LoadPerfCounter(); var Ret : Integer; begin if Exec(ExpandConstant('{sys}') + '\lodctr.exe ...
 - C++-doctest-测试框架
			
C++-doctest-测试框架 C++UnitTestDoctest 测试框架 doctest 是用过的最简单好用的的单元测试框架, 只需要引用 一个头文件即可 无main 函数的测试样例 #def ...
 - (转)ATOM介绍和使用
			
一,Atom介绍 Atom 是 Github 开源的文本编辑器,这个编辑器完全是使用Web技术构建的(基于Node-Webkit).启动速度快,提供很多常用功能的插件和主题,可以说Atom已经足以胜任 ...
 - 崛起于Springboot2.X之开发拦截器(21)
			
为什么80%的码农都做不了架构师?>>> 序言:几乎所有项目都需要拦截器,所以小伙伴们必须要掌握这门技术哦,不然只会mybaits增删改查那是实习生干的活呀. 1.创建拦截器类, ...
 - Android 工程师眼里的大前端:GMTC 2018 参会总结
			
本文由玉刚说写作平台提供写作赞助 原作者:两位低调的 Android 高手 版权声明:本文版权归微信公众号玉刚说所有,未经许可,不得以任何形式转载 概述 2018年的GMTC大会于6月22号在北京刚刚 ...