git(一) 基本操作
git简介
产生历史
git是目前世界上最先进的分布式版本控制系统。
2005年,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是git。
git的两个特点
- 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
- 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站。
安装与配置
安装命令如下:
sudo apt-get install git
安装成功后,需要设置你的用户名称与邮件地址:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
创建一个版本库
新建一个目录 git_test,在 git_test 下新建一个版本库,命令如下:
$ mkdir git_test
$ cd git_test
$ git init
可以看到在 git_test目录下创建了一个.git 隐藏目录,这就是版本库目录。
版本创建与回退
使用
(1)在 git_test 目录下创建一个文件 code.txt,编辑内容如下:
$ touch code.txt
$ vim code.txt
code.txt 里内容为:
this is the first line
(2)使用如下两条命令可以创建一个版本:
$ git add code.txt
$ git commit -m 'version1'
(3)使用如下命令可以查看版本信息:
$ git log
(4)继续编辑 code.txt,在里面增加一行,此时 code.txt 里的内容为:
this is the first line
this is the second line
(5)使用如下命令再创建一个版本并查看版本记录:
$ git add code.txt
$ git commit -m 'version2'
$ git log
(6)现在如果想回到之前的某一个版本,可以使用如下命令:
$ git reset --hard HEAD^
其中 HEAD 表示当前最新版本,HEAD^ 表示当前版本的前一个版本,HEAD^^ 表示当前版本的前个版本,也可以使用 HEAD~1 表示当前版本的前一个版本,HEAD~100 表示当前版本的前100版本。
假如现在想回到 version1,执行命令后使用git log
查看版本记录,发现现在只能看到 version1 的记录,cat code.txt
查看文件内容,现在只有一行,也就是第一个版本中 code.txt 的内容。
(7)假如我们现在又想回到 version2,可以使用如下命令:
$ git reset --hard 版本号
我们需要在之前查询的有关信息上找到 version2 的版本号。
(8)在终端执行如下命令:
$ git log
发现 version2 又回来了,可以去cat code.txt 查看里面的内容。
(9) 假如说上面的终端已经关了,该怎么回退版本?
我们在执行$ git reset --hard HEAD^
命令将版本回退到版本1。下面把终端关了,然后再打开终端,发现之前 version2 的版本号看不到了。
那么怎么再回到 version2 呢?git reflog
命令可以查看我们的操作记录。
$ git reflog
通过这个可以看到 version2 的版本号,我们再使用版本回退语句就可以让版本重回 version2 了。
工作区和暂存区
工作区(Working Directory)
电脑中的目录,比如我们的 git_test,就是一个工作区。
版本库(Repository)
工作区有一个隐藏目录 .git,这个不是工作区,而是 git 的版本库。
git 的版本库里存了很多东西,其中最重要的就是称为 stage (或者叫 index )的暂存区,还有 git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD。
因为我们创建 git 版本库时,git自动为我们创建了唯一一个 master 分支,所以现在,git commit
就是往 master 分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
前面讲了我们把文件往git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
(1)下面在 git_text 目录下再创建一个文件 code2.txt,编辑内容如下:
$ touch code2.txt
$ vim code2.txt
code2.txt 里内容为:
the code2 first line
(2)然后编辑 code.txt 内容,在其中加入一行,编辑后内容如下:
this is the first line
this is the second line
this is the three line
(3)使用如下命令查看工作树的状态:
$ git status
会提示我们 code.txt 被修改,而 code2.txt 没有被跟踪。
(4)我们使用如下命令把 code.txt 和 code2.txt 加入到暂存区,然后再执行git status
命令,会提示我们 code.txt 被修改,code2.txt 是一个新文件。所有的git add
命令是把所有的提交的修改存放到暂存区。
(5)然后执行git commit
就可以一次性把暂存区的所有修改提交到分支创建一个版本。
$ git commit -m 'version3'
(6)一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。执行git status
命令会提示没有文件需要提交,工作区是干净的。
现在我们的版本库变成了这样:
管理修改
git 管理的文件的修改,它只会提交暂存区的修改来创建版本。
(1)编辑 code.txt,并使用git add
命令将其添加到暂存区。
(2)继续编辑 code.txt,并在其中添加一行。
(3)git commit
创建一个版本,并使用git status
查看,发现第二次修改的 code.txt 内容,并没有将其添加到暂存区,所以创建版本的时候并没有提交。
撤销修改
(1)我们不小心修改了 code.txt,该怎么撤销呢?我们可以使用git checkout -- file
来丢弃工作区的改动。
$ git checkout -- code.txt
(2)我们修改了 code.txt,并将其添加到缓存区了,该怎么撤销呢?可以使用git reset HEAD file
把缓存区的修改撤销,重新放回工作区。
$ git reset HEAD code.txt
(3)如果你不但改错了东西,还从暂存区提交到了版本库,则需要进行版本回退。
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考上面的版本回退 。
对比文件的不同
对比工作区和某个版本中文件的不同:
$ git diff HAD -- code.txt
对比两个版本间文件的不同:
$ git diff HEAD HEAD^ -- code.txt
删除文件
(1)我们把目录中的 code2.txt 删除。
$ rm code2.txt
这个时候,git 知道删除了文件,因此,工作区和版本库就不一致了,git status
命令会立刻提示哪些文件被删除了。
(2) 现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git add
和git commit
创建版本。另一种情况是删错了,可以直接使用git checkout -- code2.txt
,这样文件 code2.txt 又回来了。
小结:
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
git(一) 基本操作的更多相关文章
- Git GUI基本操作
一.Git GUI基本操作 1.版本库初始化 gitpractise文件夹就变成了Git可以管理的仓库,目录下多了一个.git文件夹,此目录是Git用于管理版本库的,不要擅自改动里面的文件,这样会破坏 ...
- 【转】Git GUI基本操作
一.Git GUI基本操作 1.版本库初始化 gitpractise文件夹就变成了Git可以管理的仓库,目录下多了一个.git文件夹,此目录是Git用于管理版本库的,不要擅自改动里面的文件,这样会破坏 ...
- Git&Github基本操作与分支管理
Git的原理涉及快照流.链表.指针等,这里不作过多叙述. 1.基本操作 git init 创建一个 Git 仓库 git clone [url] 拷贝一个 Git 仓库到本地 git add [fil ...
- Git/GitHub基本操作
GitGit是分布式版本控制工具,SVN是集中式版本控制,有单点故障的问题GitHub是Git的代码托管中心,类似的国内有码云,是远程维护库Git的优势大部分操作在本地完成,不需要联网完整性有保证尽可 ...
- Git命令基本操作
本文从以下九个方面,介绍Git命令的基本操作: 一. Git安装 二. Git基本配置 三. 创建Git仓库 四. 获得Git仓库 五. 提交更新 六. 提交历史查看 七. 远程仓库 八. 打Tags ...
- 【Git的基本操作三】基本操作命令
基本操作 (1) 状态查看操作 git status 作用:查看工作区.暂存区状态 (2) 添加操作 git add [filename] 作用:将工作区文件的 添加/修改,添加到暂存区 (3) 提交 ...
- Git分支基本操作
感谢廖雪峰老师,以下教程均来自廖雪峰老师的博客,地址:https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424 基本原理 在版本 ...
- git的基本操作
今天给同事培训了一下git的使用流程,简单记录一下 1,基本概念, 远程库和本地库. 2, git clone git://url/*.git clone远程的代码库到本地 3. 创建本地分支 当前是 ...
- Github学习之路-小试牛刀,练习Git 的基本操作
一.下子windows客户端. Git 客户端下载地址:http://msysgit.github.io/ 二.打开Git Bash 命令行操作界面. 安装完成后,在开始菜单里找到“Git”-> ...
- 从VSS到SVN再到Git 记Git的基本操作
Source code control 一直是软件开发过程中重要的环节,从最初的纯文件备份,到使用工具进行管理.Source code control 工具的作用也不仅仅只是单纯的对同一个版本进行管理 ...
随机推荐
- docker安装配置gitlab详细过程
docker安装配置gitlab详细过程 获取镜像 1.方法一 1 docker pull beginor/gitlab-ce:11.0.1-ce.0 2.方法二如果服务器网路不好或者pull不下 ...
- 第三章 document对象及数组
1.数组的使用(1)声明数组var 数组名=new Array();(2)数组赋值数组名[下标]=值: 2.数组声明,分配空间,赋值同时进行var 数组名=new Array(值1,值2....)va ...
- laravel 比较好的资料地址 看云
https://www.kancloud.cn/curder/laravel/408497
- Android -- 从源码带你从EventBus2.0飚到EventBus3.0
1,最近看了不少的面试题,不管是百度.网易.阿里的面试题,都会问到EventBus源码和RxJava源码,而自己只是在项目中使用过,却没有去用心的了解它底层是怎么实现的,所以今天就和大家一起来学习学习 ...
- AD域与外部网站域名相同处理办法
环境 域控:Windows Server 2008 r2 AD域:example.cn 问题:DNS可以正常解析外部域名(如www.baidu.com),但是无法解析mail.example.cn 原 ...
- U盘安装Windows Server 2008 r2失败,改用磁盘安装
一.使用UltraISO制作系统安装启动U盘提示错误“缺少所需的CD/DVD驱动器设备驱动程序.…………”试了各种方法都不能通过U盘进行安装. 二.直接使用磁盘安装0.使用PE先将磁盘格式化.分区.1 ...
- Install rapyuta Robot Cloud Engine on Ubuntu12.04
Prepare on ubuntu12.04 sudo apt-get install vim Install fuerte ROS sudo sh -c 'echo "deb http:/ ...
- 问题 1462: [蓝桥杯][基础练习VIP]Huffuman树
题目描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: ...
- javascript Template tmpl
前两天写前端遇到很多table 和 表单需要拼接的问题 , 一堆的字符串 , 页面显得冗长,又不好维护.于是有了下文. 话不多说,上代码: 首先引用一个js文件: <script src=&qu ...
- json字符串、json对象、数组之间的转换
json字符串转化成json对象 // jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(j ...