安装Git

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

 在Linux上安装Git

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

  1. $ git
  2. The program 'git' is currently not installed. You can install it by typing:
  3. 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相关的用法。请见谅。

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

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

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

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

版本库

 创建版本库

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

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

  1. bogon:Documents zuxingyu$ mkdir GitWorkSpace
  2. bogon:Documents zuxingyu$ cd GitWorkSpace/
  3. bogon:GitWorkSpace zuxingyu$ pwd
  4. /Users/zuxingyu/Documents/GitWorkSpace

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

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

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

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

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

 将文件添加至版本库

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

  1. this is my frist git file
  2. I'm so excited

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

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

  1. bogon:GitWorkSpace zuxingyu$ git add README

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

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

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

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

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

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

  注:

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

  1. bogon:GitWorkSpace zuxingyu$ git checkout -- README

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

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

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

 查看版本库状态

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

  1. bogon:GitWorkSpace zuxingyu$ git status
  2. On branch master
  3. Changes not staged for commit:
  4. (use "git add <file>..." to update what will be committed)
  5. (use "git checkout -- <file>..." to discard changes in working directory)
  6.  
  7. modified: README
  8.  
  9. no changes added to commit (use "git add" and/or "git commit -a")

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

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

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

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

 版本回退  

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

  1. bogon:GitWorkSpace zuxingyu$ git log
  2. commit eac61c6c7cae26dbb03acf08ca10359db9be9d34
  3. Author: zuxingyu <zuxingyu@gmail.com>
  4. Date: Sat Nov 5 20:48:08 2016 +0800
  5.  
  6. thrid
  7.  
  8. commit f8cda47b31831bd42bceb59602145056f87623b2
  9. Author: zuxingyu <zuxingyu@gmail.com>
  10. Date: Sat Nov 5 20:37:54 2016 +0800
  11.  
  12. second
  13.  
  14. commit 5d9a431a6a3aa47a3adee6bbdea167522e16ec55
  15. Author: zuxingyu <zuxingyu@gmail.com>
  16. Date: Sat Nov 5 17:10:35 2016 +0800
  17.  
  18. frist version

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

  1. bogon:GitWorkSpace zuxingyu$ git log --pretty=oneline
  2. eac61c6c7cae26dbb03acf08ca10359db9be9d34 thrid
  3. f8cda47b31831bd42bceb59602145056f87623b2 second
  4. 5d9a431a6a3aa47a3adee6bbdea167522e16ec55 frist version

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

   第一版本:frist

  1. this is my frist git file
  2. I'm so execute

   第二版本:second

  1. this is my second git file
  2. I updated this file

   第三版本:third(最新)

  1. this is my second git file
  2. I updated this file
  3. 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 ,所以我的命令是

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

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

  1. bogon:GitWorkSpace zuxingyu$ git reflog
  2. eac61c6 HEAD@{0}: reset: moving to eac61c6
  3. f8cda47 HEAD@{1}: reset: moving to HEAD^
  4. eac61c6 HEAD@{2}: commit: thrid
  5. f8cda47 HEAD@{3}: commit: second
  6. 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的安装及简单提交、回退方法。本笔记涉及到的命令有:

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

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

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

Git学习笔记(一) 安装及版本库介绍的更多相关文章

  1. Git学习笔记(一)创建版本库并添加文件

    最近从廖雪峰老师的个人网站上学习git,做点笔记. ★★★★★ 先注册自己的username和email,否则会报如下错误: 注册:git config --global user.name &quo ...

  2. git学习笔记12-标签管理-版本

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...

  3. Git学习(1)-本地版本库的创建

    我用的是Git-2.14.3-64-bit版本,在windows64位上运行的,把软件分享下链接:http://pan.baidu.com/s/1jIoZ7Xc 密码:13q2. 安装及配置自行百度, ...

  4. Git学习(二)——创建版本库、查看与回退版本

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

  5. Git学习笔记(2)——版本的回退,和暂存区的理解

    本文主要记录了版本的回退,以及工作区,暂存区概念的理解. //开始之前,先回顾上次的内容,修改文件如下,并提交到版本库. Git is a distributed version control sy ...

  6. Git学习(3)创建版本库

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

  7. Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件

    远程库 远程库,通俗的讲就是不再本地的git仓库!他的工作方式和我们本地的一样,但是要使用他就需要先建立连接! 远程库有两种,一个是自己搭建的git服务器:另一种就是使用GitHub,这个网站就是提供 ...

  8. python学习笔记:安装boost python库以及使用boost.python库封装

    学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...

  9. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

随机推荐

  1. javascript实现瀑布流效果(固定宽度)

    HTML代码: <div id="content"> <div class="box"> <div class="img ...

  2. Spring - IoC(4): p-namespace & c-namespace

    p 命名空间 p 命名空间允许你使用 bean 元素的属性而不是 <property/>子元素来描述 Bean 实例的属性值.从 Spring2.0 开始,Spring 支持基于 XML ...

  3. 卡片选项页面 JTabbedPane 的使用

    package first; import javax.swing.*; import java.awt.*; import java.awt.event.*; class TtpDemo exten ...

  4. Linux eject弹出光驱

    Linux eject命令用于退出抽取式设备. 若设备已挂入,则eject会先将该设备卸除再退出. 语法 eject [-dfhnqrstv][-a <开关>][-c <光驱编号&g ...

  5. [Leetcode Week5]Word Ladder II

    Word Ladder II 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/word-ladder-ii/description/ Descripti ...

  6. HDU2594(简单KMP)

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  7. kuangbin 带你飞 概率期望

    正推不行就逆推! 经典问题:生日悖论 换成其互斥事件:m个人, 每个人生日都不相同的概率 ≤ 0.5 时最小人数. 这就是邮票收集问题的变形:每个邮票至少出现一次的概率 小于等于 0.5 邮票收集问题 ...

  8. Jmeter接口测试常见的乱码问题三种解决方法

    使用Jmeter时经常遇到中文乱码问题,下面总结三种常用的解决方式. 1. 2.在Jmeter安装文件bin中找到jmeter.properties,打开jmeter.properties,搜索“IS ...

  9. Java易错知识点(2) - 在读取Cookie时除了Key,Value是得不到其他信息的

    全文总结: 在读取Cookie,然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的: cookie.getMaxAge(); cookie.getD ...

  10. ANSI、ASCII、Unicode和UTF-8编码

    来自:http://blog.163.com/yang_jianli/blog/static/161990006201371451851274/ --------------------------- ...