$git学习总结系列(1)——基本用法
廖雪峰的官方网站:http://www.liaoxuefeng.com/
本文是学习廖雪峰的官方网站上git教程git基本用法的总结,详细内容可以进入廖雪峰的官方网站查看。
注:本文中的主要内容都是基于Linux环境进行操作的,使用的git版本为最新的2.10.2版本。文中命令示例中方括号里面的内容都表示是可选参数。
1. git与版本控制系统
git:分布式版本控制系统。
svn:集中式版本控制系统。
无论是分布式还是集中式版本控制系统,都只能对纯文本文件进行版本控制,而对二进制文件(如MS Word、MS Excel文档等)却都是无能为力的。
注意一点:文本文件必须统一使用utf-8格式编码,千万不要使用gbk编码!
2. 安装git
1. Linux环境(以Ubuntu为例)
(1) 查看当前有没有安装git
git
(2) 安装git
sudo apt-get install git
(3) 查看git版本
git --version
(4) 查看git帮助文档
有两种方法:
git
git --help
2. Windows环境
到 https://git-for-windows.github.io 上下载EXE安装包安装,安装完成后会有一个git bash命令行,然后在git bash命令行中其他操作和Linux下一致。
3. 配置git
1. 全局配置:
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
2. 在当前目录下初始化一个git版本库
git init
创建成功后,在当前目录下使用ls -al命令,可以看到创建了一个新的隐藏目录:.git,这就是git的版本库,注意不要手动修改其中的任何内容!
4. git工作区和暂存区、分支的关系
初始化成功一个git版本库后,会自动创建一个默认版本分支:master,以及一个暂存区(stage)。那么工作区(即用git init命令初始化后的硬盘文件夹)、暂存区、分支三者之间的关系是什么呢?搞清楚这一点对后面学习git的很多用法都非常重要,一图胜千言,见下图:
5. git 常用操作
准备:假如当前目录位于learngit文件夹,是一个空文件夹,首先在learngit目录初始化一个git版本库:
git init
这时发现在learngit文件夹下新建了一个隐藏目录:.git,然后在learngit目录下新建一个文本文件:readme.txt,并向其中任意添加一些内容。
1. 将readme.txt文件添加到版本库暂存区
git add readme.txt
附:git add的其他用法:
添加工作区的所有修改(包括新建、修改和删除文件这三种修改):
git add -A添加工作区中新建和修改文件的改动到暂存区,但不包括删除文件的改动:
git add *或git add .添加工作区修改和删除文件的改动到暂存区,但不包括新建文件的改动:
git add -u撤销单个或多个文件的add操作:
git reset 文件名1 文件名2...撤销当前所有add到暂存区的操作:
git reset
2. 删除文件
git rm 文件名1 文件名2...
3. 从暂存区提交修改(包括git add和git rm操作)到主分支
git commit -m "create a new file readme.txt"
注:git commit操作只会提交已经add到暂存区的修改,而工作区还未被add进暂存区的修改是不会被提交的。
4. 查看工作区状态
git status
5. 查看工作区和当前版本库最新版本之间的差别
git diff HEAD [-- 文件名1 文件名2...]
6. 撤销暂存区的修改(包括git add和git rm操作)
git reset HEAD [文件名1 文件名2...]
7. 查看commit操作的历史记录
git log [--pretty=oneline]
注:--pretty=oneline参数是为了在一行显示一条历史记录。
8. HEAD的理解
HEAD其实相当于一个指针,它指向的版本号就是当前版本库的最新版本。
HEAD:当前版本
HEAD^ :上一个版本
HEAD^^ :上上个版本
......
HEAD~100:往前100个版本
HEAD的指针作用可以用如下示意图表示:
从上图也可以看出,HEAD指针可以指向不同的版本,而这也正是下面要讲的版本回退和切换的原理。
9. 回退到某一个版本
回退到上一个版本:
git reset --hard HEAD^回退到某个版本:
git reset --hard 版本号
注:版本号可通过git log命令查看,只需要写前几位即可,git会自动识别匹配。
10. 回到未来
假如回退到之前的某个版本后,又后悔了不想回退了,想要撤销回退(即想要回到回退前的版本),可以使用如下命令:
先查看commit和reset命令的所有操作历史记录:
git reflog找到想要回到的未来的某个版本号,回到未来:
git reset --hard 版本号
随机推荐
- C# 委托和Lambda表达式
看了一些资料,简要的总结一下委托,Lambda,事件. 委托. 1)委托的含义 委托定义了函数类型,是一种类似“C++函数指针”的东西. 但委托和函数指针还是不同的,函数指针不过是一个函数的入口地址( ...
- 文件上传下载:commons-fileupload + Servlet 2.5
数据库:MySQL 开发技术:JSP + Servlet 2.5 第三方的上传组件: commons-fileupload connons-io 上传页面1.form表单需要增加:enctype=&q ...
- linux rz xshell
这个命令写好好几次 就是没有记住 放到这里 每次用的时候查一遍 慢慢就记住了~~~ sudo yum install lrzsz -y
- 调试node.js应用--node-inspector
如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多.使用起来跟Chrome的javascript调试器很相似. 使用npm安装: $ npm ...
- NIPS2016 best paper: Value Iteration Networks 解析
论文介绍ppt:https://pan.baidu.com/s/1gfDURyb Tamar, Aviv, et al. "Value iteration networks." A ...
- python 面向对象三大特性(封装 多态 继承)
今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...
- [AC自己主动机+状压dp] hdu 2825 Wireless Password
题意: 给n.m,k ,再给出m个单词 问长度为n的字符串.至少在m个单词中含有k个的组成方案有多少种. 思路: 因为m最大是10,所以能够採取状压的思想 首先建立trie图,在每一个单词的结束节点标 ...
- Ant Design使用问题记录
公司的测试管理平台前端使用的是Ant Design of React框架,后台使用的是python,数据库用的是mysql.没有参与前期的开发,听说是工作了10年积累下来的一个暂且可用的管理平台,开发 ...
- 控制器post参数接收
一.post对象 1.后台c# public class TestController : ApiController { [HttpPost] public string SaveData1(Tb_ ...
- Android无线测试之—UiAutomator UiSelector API介绍之一
一. UiSelector类介绍: 1) UiSelector类说明: UiSelector代表一种搜索条件,可以在当前界面上查询和获取特定元素的句柄,当找到多余一个的匹配元素,则返回布局层次结构上第 ...