Git学习笔记(一) 安装及版本库介绍

安装Git

最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。

 在Linux上安装Git

   首先,你可以试着输入 git ,看看系统有没有安装Git:

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

  像这样就表明没有安装git,安装命令: sudo apt-get install git 

  当然你也可以在git官网上找到源码进行安装。官网地址:https://git-scm.com/

 在Mac上安装Git

  有两种安装方法:

  1.安装homebrew后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。

  2.直接从AppStore下载Xcode。Xcode自带git,注意:下载好后运行一次。才能安装好。

 在Windows上安装Git

  略,同时后面的笔记中也不记录有关Windows相关的用法。请见谅。

 

 安装完成后,设置你的昵称及邮箱。

bogon:hello zuxingyu$ git config --global user.name "zuxingyu"
bogon:hello zuxingyu$ git config --global user.email "zuxingyu@gmail.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

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

版本库

 创建版本库

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

所以,创建一个版本库非常简单,首先,选择一个合适的地方,先创建一个空目录:

bogon:Documents zuxingyu$ mkdir GitWorkSpace
bogon:Documents zuxingyu$ cd GitWorkSpace/
bogon:GitWorkSpace zuxingyu$ pwd
/Users/zuxingyu/Documents/GitWorkSpace

然后通过 git init 命令将此文件夹变为Git仓库进行管理。

bogon:GitWorkSpace zuxingyu$ git init
Initialized empty Git repository in /Users/zuxingyu/Documents/GitWorkSpace/.git/

可以通过 ls -a 命令查看到当前目录结构

bogon:GitWorkSpace zuxingyu$ ls -a
.    ..    .git

 .git 是一个隐藏的目录。里面的文件不做修改。

 将文件添加至版本库

  我们可以写一个 README 文件,放入版本库中,内容如下:

this is my frist git file
I'm so excited

    注:README文件一定要放在之前创建好的资源库中。

  第一步:将文件添加至版本库中 git add README 

bogon:GitWorkSpace zuxingyu$ git add README 

    注:执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

  第二步:将文件提交至版本库中 git commit README -m "frist version" 

bogon:GitWorkSpace zuxingyu$ git commit README -m "frist version"
[master (root-commit) 5d9a431] frist version1 file changed, 2 insertions(+)create mode 100644 README

    注:1. git commit 命令中, -m 后面的字符表示本次提交的说明,一般输入的内容是修改了什么等等。虽然可以不写,但强烈建议要写上去。

      2. git add 和 git commit 分开的原因是,你一次修改的文件可能有很多个所以你可以add很多文件,但是commit就一次,把你add的文件全部提交上去,如下:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

  注:

   1.如果你修改了一个文件后 git add 了,然后你又修改了该文件,那么 git commit 的时候添加的只是第一次修改的内容。因为只有 git add 之后才把修改的文件放入暂存区中(后面会说明),正确的做法是将所有要修改的文件都修改完成之后 git add 下,然后再 git commit ,如果你add之后又修改了,那么只能再add下了。     2.如果你想撤销之前修改的内容。可以使用:

bogon:GitWorkSpace zuxingyu$ git checkout -- README 

    来撤销当前的修改,这时候再查看下版本库里的内容时就会变成:

bogon:GitWorkSpace zuxingyu$ git status
On branch master
nothing to commit, working tree clean

   3.如果你已经 git add 了,那么可以使用 git reset HEAD README 进行撤销修改,意思就是版本回到最新版。

 查看版本库状态

  当我们在资源库中修改了 README 文件后,我们可以通过 git status 来查看资源库中文件的修改状态

bogon:GitWorkSpace zuxingyu$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   READMEno changes added to commit (use "git add" and/or "git commit -a")

    注:上面的文字已经告诉我们README这个文件已经被修改过了。

   如果你已经忘记了之前修改了文件的哪里,可以通过 git diff 命令来查看文件的修改情况。

bogon:GitWorkSpace zuxingyu$ git diff README 
diff --git a/README b/README
index a289834..745208d 100644
--- a/README
+++ b/README
@@ -1,2 +1,2 @@this is my frist git file
-I'm so execute
+I updated this file

    注: git diff 就是查看文件的不同。后面跟着的是文件名。-代表删除,+代表添加。记得修改后 git add 和 git commit 下

 版本回退  

  在实际操作中我们可能无法知道之前都提交了哪些版本,改了什么内容。这时候我们就需要用 git log 命令来查看之前的操作了。

bogon:GitWorkSpace zuxingyu$ git log
commit eac61c6c7cae26dbb03acf08ca10359db9be9d34
Author: zuxingyu <zuxingyu@gmail.com>
Date:   Sat Nov 5 20:48:08 2016 +0800thridcommit f8cda47b31831bd42bceb59602145056f87623b2
Author: zuxingyu <zuxingyu@gmail.com>
Date:   Sat Nov 5 20:37:54 2016 +0800secondcommit 5d9a431a6a3aa47a3adee6bbdea167522e16ec55
Author: zuxingyu <zuxingyu@gmail.com>
Date:   Sat Nov 5 17:10:35 2016 +0800frist version

 在这个log中我们可以看到我提交了两个版本的内容,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

bogon:GitWorkSpace zuxingyu$ git log --pretty=oneline
eac61c6c7cae26dbb03acf08ca10359db9be9d34 thrid
f8cda47b31831bd42bceb59602145056f87623b2 second
5d9a431a6a3aa47a3adee6bbdea167522e16ec55 frist version

 这里我们要说下几个版本内容

   第一版本:frist

this is my frist git file
I'm so execute

   第二版本:second

this is my second git file
I updated this file

   第三版本:third(最新)

this is my second git file
I updated this file
this is my thrid git file

  现在我想把第三版本回退到第二版本。操作步骤如下:

 bogon:GitWorkSpace zuxingyu$ git reset --hard HEAD^ 

 注:

  1. HEAD 代表当前版本(本文中指第三版本),那上一个版本(第二版本)就是 HEAD^ ,上上个版本就是 HEAD^^ ,当然如果你要回退到前10个版本的时候写 HEAD^…… 这样就不太好了。我们可以写成 HEAD~10 

  2.如果回退错误,想回到当前版本(本文中指第三版本),那就必须得记住当前版本的 commit id ,这个ID是提交时出现的。所以回到当前版本的办法就是控制台没有关闭,我在提交第三个版本的时候 commit id 是 eac61c6 ,所以我的命令是

bogon:GitWorkSpace zuxingyu$ git reset --hard eac61c6
HEAD is now at eac61c6 thrid

  注:如果你提交版本后控制台关闭了,可以通过 git reflog 命令找到 commit id 

bogon:GitWorkSpace zuxingyu$ git reflog
eac61c6 HEAD@{0}: reset: moving to eac61c6
f8cda47 HEAD@{1}: reset: moving to HEAD^
eac61c6 HEAD@{2}: commit: thrid
f8cda47 HEAD@{3}: commit: second
5d9a431 HEAD@{4}: commit (initial): frist version

  在这里我们就发现最新版本的ID是 eac61c6 

工作区和暂存区

  Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

  先来看名词解释。

 工作区(Working Directory)

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

 版本库(Repository) 

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

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

  当我们将文件 git add 的时候,实际上就是将需要提交的文件放到了暂存区(Stage),不管 git add 几次,都是提交到暂存区中。然后 git commit 的时候一次性提交到分支中去。

 

小结

  本章节只是介绍了Git的安装及简单提交、回退方法。本笔记涉及到的命令有:

git init                           // 创建Git仓库
git add file                     // 添加文件到git仓库中
git commit -m "note"      // 将添加或修改的文件提交到Git仓库中
git status                       // 查看Git仓库的状态
git diff file                      // 查看文件的修改信息
git log                            // 查看Git仓库中版本的提交日志
git log --pretty=oneline   // 查看Git仓库中版本的提交日志(简略写法)
git reset --hard HEAD^   // 将文件回退到当前版本的前一个版本

  东西不多但是也需要大家消化消化,下节笔记将介绍创建分支及远程仓库的相关内容。

 

参考网址:廖雪峰的官方网站

 

转载于:https://www.cnblogs.com/zuxingyu/p/6034498.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础:迭代器、生成器(yield)详细解读

1. 迭代器 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问&#xff0c;知道所有的元素被访问完结束。迭代器只能往前不会后退&#xff0c;不过这也没什么&#xff0c;因为人们很少在迭代途中往后退。 1.1 使用迭代器的优点 对于原生支持随机访问的数据…

LazyInitializationException的四种解决方案–第2部分

本文从教程​​的第1部分继续。 使用PersistenceContextType.EXTENDED的有状态EJB加载收集 该方法只能应用于与Full JEE环境兼容的应用程序&#xff1a;将EJB与PersistenceContextType.EXTENDED一起使用。 检查下面的代码&#xff0c;DAO的样子&#xff1a; package com.ejb…

Linux将硬盘转化为pv,Linux扩展硬盘 物理卷(PV) 卷组(VG) 逻辑卷(LV)

1、给虚拟机添加两块新的sata虚拟硬盘&#xff0c;容量8G和10G# fdisk -l 命令2、分别在这两个硬盘上建立pvPvcreate /dev/sdb 创建一个物理卷/dev/sdb 磁盘名是 fdisk -l 查询出来的Pvscan 查看当前所有物理卷Pvdisplay 查看当前所有物理卷的详情3、创建VG&#xff0c;使得…

ubuntu 16.10 shu rufa meiy ou l e geng xi zhi hou

转载于:https://www.cnblogs.com/ganmk--jy/p/6035894.html

ZOJ Monthly, November 2012

A.ZOJ 3666 Alice and Bob 组合博弈&#xff0c;SG函数应用#include<vector> #include<cstdio> #include<cstring> #include<algorithm>using namespace std;const int maxn 10000 100; int SG[maxn]; vector<int> g[maxn];int mex(int u) { /…

使用Aspect和Spring Profile进行电子邮件过滤

在Web应用程序开发期间&#xff0c;经常需要发送电子邮件。 但是&#xff0c;有时数据库中会包含来自生产的数据&#xff0c;并且存在在电子邮件测试执行期间向真实客户发送电子邮件的风险。 这篇文章将解释如何避免在没有在发送电子邮件功能中明确编写代码的情况下避免这种情…

红旗linux 进不去图形界面,进不了红旗Linux6.0的图形界面请高手帮忙

习生 于 2008-11-02 11:08:42发表:引用:原帖由 zhaoruiqi 于 2008-11-2 10:03 发表 我的也是进不了图形界面&#xff0c;用文本安装后进系统也一样正常按rtl的方法对xorg.conf进行修改,已经能进入图形界面。你看看楼上rtl的回复的能否对你有帮助。zhaoruiqi 于 2008-11-02 10:0…

总结继承的几种方式

简单总结继承的几种方式 JavaScript作为一门弱类型的语言&#xff0c;本着精简的原则&#xff0c;它取消了类的概念&#xff0c;只有对象的概念&#xff0c; 更是有万物皆对象的说法。在基于类的面向对象方式中&#xff0c;对象&#xff08;object&#xff09;依靠类&#xff0…

Oracle SQL精妙SQL语句讲解(二)

- 如果存在就更新&#xff0c;不存在就插入用一个语句实现 DROP TABLE t_mg; CREATE TABLE t_mg(code VARCHAR2(10), NAME VARCHAR2(10)); SELECT * FROM t_mg; MERGE INTO t_mg a USING (SELECT the code code, the name NAME FROM dual) b ON (a.code b.code) WHEN M…

Spring Security –在一个应用程序中有两个安全领域

这篇博客文章主要是关于Spring Security配置的。 更具体地说&#xff0c;它打算显示如何在一个Web应用程序中配置两个不同的安全领域。 第一安全领域是针对浏览器客户端的。 它使我们能够在登录页面中登录并访问受保护的资源。 第二安全领域旨在处理来自android应用程序的REST…

基于Activiti工作流引擎实现的请假审核流程

概要 本文档介绍的是某商用中集成的Activiti工作流的部署及使用&#xff0c;该框架用的Activiti版本为5.19.0。本文档中主要以一个请假流程为例子进行说明&#xff0c;该例子的流程图如下&#xff1a; 这是一个可以正常运作的工作流业务了&#xff0c;但是它也有不足的地方&…

linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件

1.下载ffmpeg源码,官网&#xff0c;我这里直接采用git 方式下载&#xff1a;下载ffmpeg.png终端输入git命令&#xff1a;静静等待~最后下载的版本为3.4.6 。image.png这里注意一下&#xff0c;刚开始我用的ndk版本是ndk-17b&#xff0c;在编译该版本的ffmpeg时始终失败&#xf…

4Web Service中的几个重要术语

4.1WSDL: web service definition language 直译:Webservice定义语言 1.对应一种类型的文件.wsdl 2.定义了webservice的服务端与客户端应用交互传递请求和响应数据的格式和方式 3.一个webservice对应一个唯一的esdl文档 4.2SOAP: simple object access protocal 直译:简单对象访…

云端:亚马逊,谷歌应用引擎,Windows Azure,Heroku,Jelastic

您想在云端吗&#xff1f; 您有很多选择。 我已经评估或使用了许多方法&#xff0c;因此这里有几句话。 &#xff08;当我使用Java时&#xff0c;我将包括一些与Java相关的注释&#xff0c;但大多数情况适用于所有&#xff08;受支持的&#xff09;语言。&#xff09; 但是在深…

JS-字符串操作-替换

<!DOCTYPE HTML><html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>无标题文档</title><style>p { border:10px solid #ccc; background:#FFC; width:400px; padding:20px;…

linux下kegg注释软件,KEGG数据中全部代谢反应和代谢物注释信息的下载

# 加载函数与R包 -----------------------------------------------------------------library(KEGGREST)library(plyr)source("./RbioRXN-master/RbioRXN-master/R/get.kegg.all.R")source("./RbioRXN-master/RbioRXN-master/R/get.kegg.byId.R")## KEGG数…

java常见异常

算术异常类&#xff1a;ArithmeticExecption空指针异常类&#xff1a;NullPointerException 类型强制转换异常&#xff1a;ClassCastException 数组负下标异常&#xff1a;NegativeArrayException 数组下标越界异常&#xff1a;ArrayIndexOutOfBoundsException 违背安全原则异常…

Spring Security 3 Ajax登录–访问受保护的资源

我看过一些有关Spring Security 3 Ajax登录的博客&#xff0c;但是我找不到解决如何调用基于Ajax的登录的博客&#xff0c;匿名用户正在Ajax中访问受保护的资源。 问题 – Web应用程序允许匿名访问某些部分&#xff0c;并且某些部分是受保护的资源&#xff0c;需要用户登录。 …

测试环境下将centos6.8升级到centos7的操作记录(转)

在测试环境下安装openstack&#xff0c;由于在centos6下安装openstack&#xff0c;针对源的问题有很多&#xff0c;安装起来很不顺利&#xff01; 但是在centos7下安装却很顺利&#xff0c;所以考虑将服务器由centos6升级到centos7 这个我是在测试机中运行的&#xff0c;建议不…

linux运维选择题,初学Linux练习题

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中tr ‘a-z’ ‘A-Z’ < /etc/issue > /tmp/issue.out2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中3、一个linux用户给root发邮件&#xff0c;要求邮件标题为”help”&#xff0c…