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环境 本篇导读: 前面介绍了两款代码管理工具 ...
随机推荐
- LCA--倍增法
一般来求LCA有3种方法 1.倍增 2.RMQ+欧拉序 3.tarjan(离线) 本文将倍增求lca 这个算法是很常见很常见的 也是较好理解的 (我也不明白假期学长讲的时候我为什么死活都不明白 自闭q ...
- nova系列二:kvm介绍
一 什么是kvm KVM 全称 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,这就使得linux内核本身就相当于一个Hypervisor. ...
- Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar
将rt.jar和jxl.jar,放在\apache-jmeter-5.0\lib\ext下面 import java.io.*; import java.util.ArrayList; import ...
- SQL Server中UPDATE和DELETE语句结合INNER/LEFT/RIGHT/FULL JOIN的用法
在SQL Server中,UPDATE和DELETE语句是可以结合INNER/LEFT/RIGHT/FULL JOIN来使用的. 我们首先在数据库中新建两张表: [T_A] CREATE TABLE ...
- odoo11 审批流中行总额与申请单总额的计算问题
一. 问题的描述 在做审批流的过程中,涉及到这样一个问题,用户申请的行总额需要根据当前行的数量和单价相乘计算得出,这本来是一个很简单的功能需求,利用odoo的计算方法就可以轻松实现,但是在在view页 ...
- 我去年码了个表(WPF MvvM)
又快个把月没写博客了(最近忙着学JAVA去了,都是被逼的/(ㄒoㄒ)/~~),然后用WPF码了个表,其实想加上那种提醒功能什么的,额,就这样了吧,主要是感受一下数据驱动的思想. 效果如下: 前端XAM ...
- python二:数据类型举例练习--小白博客
一.#字符串 res = 'hello,world' 1.#字符串切片取值:******* print(res[0:5]) 顾头不顾尾,取下标0-4的字符 print(res[0:-1:2]) 步长为 ...
- 海康威视笔试(C++)
1. select和epoll的区别 2.服务器并发量之高性能服务器设计 3.SQL关键字 4.TCP乱序和重传的问题 5.c++对象内存分配问题 6.c++多线程 join的用法: Thread类的 ...
- ofo C++面试
面试官不是C++方向,所以上来就是三个算法题. 1. 假设一个男生和他女朋友约吃饭,男生到的时间点是 6 点 到6点半,女生到的时间可能是 6点15到6点30,都是等概率的到达,问男生比女生到的晚的概 ...
- 分布式ID生成系统 UUID与雪花(snowflake)算法
Leaf——美团点评分布式ID生成系统 -https://tech.meituan.com/MT_Leaf.html 网游服务器中的GUID(唯一标识码)实现-基于snowflake算法-云栖社区-阿 ...