您的位置:首页 > 编程语言

Git&GitHub学习笔记之(二)Git命令操作

2017-02-21 17:05 483 查看
在上篇文章中,我们就说过Git与GitHub不是一回事。GitHub是基于Git的,Git是基础。所以再学习更多的GitHub知识之前,就得先了解Git。

一、什么是Git

Git 是一款免费、开源的分布式版本控制系统,他是著名的 Linux 发明者 Linus Torvalds 开发的。Git也是目前世界上最先进的分布式版本控制系统。

Git的特点

这段话引自这里,我也很好的学习了

分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具;

保存点 : Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目额状态; 可以在该保存点将多人提交的源码合并,也可以会退到某一个保存点上;

Git离线操作性 :Git可以离线进行代码提交, 因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行; 这意味着Git的速度要比SVN等工具快得多, 因为SVN等工具需要在线时才能操作, 如果网络环境不好, 提交代码会变得非常缓慢;

Git基于快照 : SVN等老式版本控制工具是将提交点保存成补丁文件, Git提交是将提交点指向提交时的项目快照,

提交的东西包含一些元数据(作者, 日期, GPG等);

Git的分支和合并 : 分支模型是Git最显著的特点, 因为这改变了开发者的开发模式,

SVN等版本控制工具将每个分支都要放在不同的目录中, Git可以在同一个目录中切换不同的分支;

分支即时性 : 创建和切换分支几乎是同时进行的, 用户可以上传一部分分支, 另外一部分分支可以隐藏在本地,不必将所有的分支都上传到GitHub中去;

分支灵活性 : 用户可以随时 创建 合并 删除分支, 多人实现不同的功能, 可以创建多个分支进行开发, 之后进行分支合并,这种方式使开发变得快速, 简单, 安全;

说到版本控制系统,大家应该听说过 SVN ,SVN是集中式版本控制系统,算是过去式了;而Git 是新时代的产物,是分布式版本控制系统。那么集中式与分布式有什么区别呢?我用廖大神的话,给大家展示一下 (这些算是我站在巨人的头顶上,给大家说明一下!)

2.集中式vs 分布式

集中式版本控制系统,版本库是集中存放在中央服务器的,,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

缺点:集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

好了,正式开启我的学习之路了。

二、 Git安装

我用的是windows系统, 从这里下载:https://git-for-windows.github.io/

安装完成后,查看你的git是否安装成功,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,然后在命令行里面输入git,出现如下提示证明安装成功。



安装完成后,还需要设置一番,在命令号输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"


因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

注意:git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

三、Git的具体命令

命令行操作是全集,图形操作都是命令行的一个子集

git创建版本库

版本库有名仓库(repository),简单理解成为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原。

创建版本库的方式:选择一个合适的地方,创建一个空目录。。

我在我的E盘创建了一个文件件learngit,然后打开文件夹,右击,点击Git Bash Here



进入命令窗口。输入 git init 命令将这个目录变成Git可以管理的仓库,即初始化一些与仓库相关的内容。

我们发现这个文件夹git是隐藏的。打开git文件我们发现会有



2.配置

学习一款工具的时候,首先应该认识它的配置。运行以下命令可以查看git的配置,输入命令git config –list



Git的配置是有三份配置文件合成的,分别是本地配置:配置文件保存在当前仓库中;全局配置:配置保存在当前windows登录用户的根目录下;系统配置:配置文件保存在git的安装目录下的某个目录中。当有相同配置时,本地配置的优先级较高,全局配置次之,系统配置优先级最低。

本地配置就在git文件中的config文件中,你可以 打开查看一下



你也可以对配置进行增加、修改、删除、查看,基本上都可以用命令实现。

查看本地配置、全局配置、系统配置的命令如下:

git config --local --list
git config --global --list
git config --system --list


修改配置的命令如下:

git config --local 配置项 “配置值”  如git config – local core.bare true
git config --global 配置项 “配置值”
git config --system配置项 “配置值”


删除配置

git config –local –unset core.bare


3.. 查看帮助

git 查看帮助很简单,git config –h或者git config –help

注意 两个(–)要写选项的全称 一个(-)可以选项的简称

有的选项有简称,有的没有。但是一定有全称。

4.. 工作区、暂存区 、仓库

工作区是指当前编辑代码的文件夹,也是.git仓库所在的文件夹;

暂存区只是一个概念,实际上并不存在;

仓库就是.git文件夹了,它是我们运行 git init命令时自动创建的,默认是隐藏的,所有的历史都保存在这里。(这个地方稍后我们结合实际操作说一下)

5. 把文件添加到版本库

编写一个README.md文件,内容如下

first:
Git is a version control system
Git is free software


这个文件一定要放到learngit目录下(子目录也可以),因为这个Git的一个仓库,放到其他地方Git会找不到这个文件。

跟踪文件

初始化一个仓库时,仓库是空空的,要运行以下命令,让git跟踪某文件

git add 文件名

运行以上命令就把一个文件跟踪起来,这个文件就进入了暂存区。要注意的是.git不会跟踪一个空文件夹

用命令 git add告诉Git,把文件添加到仓库中 git add README.md

6.查看状态:

查看命令用的很频繁,命令如下 git status



git会把文件的变化列出来,例如未跟踪的文件,已修改的文件,已删除的文件等,将会被提交的文件列表等。良好的习惯是在操作之前先查看一下状态。

7.提交

提交就是指把暂存区的文件提交到git仓库,可以通过以下命令进行

git commit –m “提交说明” (这个说明最好是有意义的,这样你就能从历史记录中方便找到改动的记录)

git commit命令执行成功后告诉你,1个文件被改动(我们新添加的README.md文件)插入了3行内容(README.md中有3行内容)

提交同时也是一个名词,在git中一个提交就是一个历史,每个提交都有一个唯一的提交id。



注意: 添加文件到Git仓库,分两步

第一步,使用命令git add file,注意 可反复使用多次,添加多个文件

第二步,使用git commit,完成

8.. 查看日志

查看日志是指查看提交的记录,,可以运行如下命令



git log 还可以显示的简洁一点,加上—oneline选项

git log –oneline 单行显示模式下的 提交id也变短了,注意这个提交id 也是可以进行某些操作的,和长长的提交id具有相同的功能。

9.查看不同提交记录

我们已经成功地添加并提交了一个README.md文件,现在我们继续工作,修改了README.md文件,内容改成如下

second:
Git is a distributed version control system
Git is free software


,现在运行 git status



git status命令让我们时刻掌握仓库当前的状态,上面告诉我们,README.md被修改过了,但是没有提交修改。

如果想查看具体修改了什么内容,用命令git diff



从上面的命令我们知道,我们first修改成了second, 第二行中我们加入了“distribute”。

知道了对README.md做了什么修改后,再提交。提交步骤是一样的



10. 检出文件(版本回退)

检出文件时指从提交中拿出一个文件到工作区,例如当想放弃某个文件的修改时,就可以这样做 git checkout 文件名

演示: 我们再次修改README.md文件

third:
Git is a distributed version control system
Git is free software distributed under the GPL


然后提交。



像这样,不断对文件进行修改,然后不断提交修改到版本库。一旦把文件改乱了,或者误删了文件,还可以从最近的commit恢复,然后继续工作,而不是从头开始。

现在看看README.md文件一共有几个版本被修改提交到Git仓库里



如果嫌弃信息太多,不妨这样,加一个 –pretty=oneline



如果想把README.md回退到以前的版本,怎么做?

首先,Git必须了解当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本是HEAD^,上上一个版本HEAD^^,当然往上100个版本,写成HEAD~100.

回退到上一个版本,使用命令git reset



查看README.md的内容,果然是

second:
Git is a distributed version control system
Git is free software




如果你再想回到第三次提交的版本的时候,只要你记得第三次commit id就好了,



若你忘记了第三次的commit id也不用慌,用命令git reflog,记录你的每一次命令。



现在接着讲讲 工作区和暂存区

工作区(Working Directory)

就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。



分支和HEAD的概念我们以后再讲。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

11. 管理和修改

每次修改,如果不add到暂存区,那就不会到commit中。

12. 撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。

我在README.md中添加了一行

third:

Git is a distributed version control system

Git is free software distributed under the GPL

这句话是我要撤销的。

其中上句话你是可以手动删除的,但是用Git命令也可以.



场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

third:

Git is a distributed version control system

Git is free software distributed under the GPL

这是我要撤销修改的一句话。



工作区变成了

third:
Git is a distributed version control system
Git is free software distributed under the GPL


场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

13. 删除文件

命令git rm用于删除一个文件。

实验:添加一个delete.txt到Git



用git rm删除掉,并且git commit。文件果然被删除了。



好了,Git暂时说到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息