Git要点
前面的话
本文将总结Git要点
版本管理工具
【作用】
1、备份文件
2、记录历史
3、回到过去
4、对比差异
【分类】
1、手动版本控制(又叫人肉VCS)
2、LVCS 本地
3、CVCS 集中式(如SVN)
4、DVCS 分布式(如Git)
Git优缺点
【优点】
1、 快速、灵活。每个开发中本地都有全量仓库,提交到本地非常快
2、 离线工作,能避免单点故障。即便远端代码服务器崩溃,开发者也能继续工作,无需等待修复。一定程度也是一种安全备份
3、 任意两个开发者之间可以很容易的合并和解决冲突
【缺点】
1、 学习曲线稍微陡峭一些,要多花一点学习时间
2、 代码保密性差,不便于权限控制。一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息,权限控制需要另外一套系统来保证
三种状态
1、已提交(commited):该文件已经被安全地保存在本地数据库中了
2、已修改(modified):表示修改了某个文件,但还没有提交保存
3、已暂存(staged):把已修改的文件放在下次提交时要保存的清单中

基本操作
1、获取仓库
使用git init创建仓库或使用git clone获取远程仓库
2、创建开发分支
使用git checkout -b dev创建dev分支
3、开发程序,修改代码文件
4、跟踪文件并提交到本地仓库
使用git add .跟踪文件,使用git commit -m 'xxx'提交到本地仓库
5、远程操作
使用git remote add origin git://xxxxx 添加元素仓库,使用git push origin dev 将本地的dev分支推送到远程的dev分支
[注意1]git push origin dev是git push origin dev:dev的缩写,如果省略:dev,默认地,远程服务器使用和本地相同的分支
[注意2]远程库的默认名称为origin,当然也可以起名为其他名称
6、当前功能开发完毕后,到master分支处理
使用git checkout master切换到master分支后,使用git pull origin master,获取master分支上的更新。使用git log -p来查看更新。处理后,使用git merge dev将dev分支合并到master分支上,然后使用git push origin master将本地master分支推送到远程master分支上
注意事项
1、Unix的哲学是“没有消息就是好消息”,git也类似。当没有任何返回时,表示操作成功
2、 版本控制系统只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等。图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道
Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动
3、使用Windows的同学千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,会让你遇到很多不可思议的问题
4、git commit -am可以写成git commit -a -m,但不能写成git commit -m -a
5、切换分支之前,最好要保证工作区干净
6、rebase和merge的区别如下
merge会根据两个分支的共同祖先和两个分支的更新提交进行一个三方合并,并保存这两个分支
rebase并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面,并删除了当前分支
rebase可以产生一个更为整洁的提交历史,但若使用rebase操作,一定要确保没有其他人会使用被删除的分支
7、 回退版本
有时候可能会遇到git提交错误的情况,比如提交了敏感的信息或者提交了错误的版本。这个时候想将提交到代码库的记录删除
首先要找到提交点的hash,通过git log命令可以获取提交的历史找到需要回滚到的提交点

由图中得到,要返回添加测试文件的前一个版本,即更新项目说明的版本,hash值是d5ba961
接着,使用git reset --hard commit_hash命令,返回该版本

再使用git push origin head --force即可

Git要点的更多相关文章
- git学习——Git 基础要点【转】
转自:http://blog.csdn.net/zeroboundary/article/details/10549555 简单地说,Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是 ...
- Git:基础要点
直接快照,而非比较差异. 近乎所有操作都可本地执行. 在Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网.但如果用CVCS 的话,差不多所有操作都需要连接网络.因为Git 在本地磁盘上就保 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )
在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...
- 版本控制工具Git的学习笔记
在网上看到一个很不错的Git教程,学习后果断要做一下总结. 教程地址:http://www.liaoxuefeng.com/ 总结要点: 安装Git因为我个人的开发主要是基于windows环境下,所以 ...
- linux下git以及github的连接与使用
简单理解 Git 的思想和基本的工作原理,能够更好的进一步和使用Git.在开始学习Git 的时候,最好不要把Git的各种概念和其他的版本控制系统诸如 Subversion 等相比,否则容易混淆每个操作 ...
- [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git
[.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...
- [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit
[.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...
- [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境
[.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...
随机推荐
- Egg入门学习(二)---理解service作用
在上一篇文章 Egg入门学习一 中,我们简单的了解了Egg是什么东西,且能做什么,这篇文章我们首先来看看官网对Egg的整个框架的约定如下,及约定对应的目录是做什么的,来有个简单的理解,注意:我也是按照 ...
- AI VGG16
VGG(Visual Geometry Group) 16 参考链接: https://arxiv.org/abs/1409.1556
- 20175329 2018-2019-3《Java程序设计》第三周学习总结
学号 20175329 2018-2019-3<Java程序设计>第三周学习总结 教材学习内容总结 第四章 第四章主要介绍JAVA中的类与对象的划分,其中有很多复杂的概念以及知识点需要花很 ...
- [Flume][Kafka]Flume 与 Kakfa结合例子(Kakfa 作为flume 的sink 输出到 Kafka topic)
Flume 与 Kakfa结合例子(Kakfa 作为flume 的sink 输出到 Kafka topic) 进行准备工作: $sudo mkdir -p /flume/web_spooldir$su ...
- Autofac容器对象实例的几种生命周期类型
实例范围决定了如何在同一服务的请求之间共享实例. 请注意,您应该熟悉生命周期范围的概念,以便更好地理解此处发生的情况. 当请求服务时,Autofac可以返回单个实例(单实例作用域),新实例(每个依赖作 ...
- lower_bound函数与upper_bound函数
头文件 : algorithm vector<int>a a中的元素必须升序,用的是二分 lower_bound(a.begin(),a.end(),k) 返回a容器中,最右边的小于等于k ...
- 逻辑回归为什么用sigmoid函数
Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷. 因此,使用logistic函数(或称作sigmoid函数)将自 ...
- Python_匿名函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数. 代码如下: 1 正常函数: 2 3 def calc(n): 4 5 return n ** n 6 7 print(calc(10)) 8 ...
- python中类方法,实例方法,静态方法的作用和区别
Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么 ...
- 我的第一个Go web程序 纪念一下
参考Go web编程,很简单的程序: 大致的步骤: 绑定ip和端口 绑定对应的处理器或者处理器函数,有下面两种选择,选择一种即可监听ip及端口 处理器: 定义一个struct结构体 然后让这个结构体实 ...