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 version
1 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: README no 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 +0800 thrid commit f8cda47b31831bd42bceb59602145056f87623b2
Author: zuxingyu <zuxingyu@gmail.com>
Date: Sat Nov 5 20:37:54 2016 +0800 second commit 5d9a431a6a3aa47a3adee6bbdea167522e16ec55
Author: zuxingyu <zuxingyu@gmail.com>
Date: Sat Nov 5 17:10:35 2016 +0800 frist 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^ // 将文件回退到当前版本的前一个版本
东西不多但是也需要大家消化消化,下节笔记将介绍创建分支及远程仓库的相关内容。
参考网址:廖雪峰的官方网站
Git学习笔记(一) 安装及版本库介绍的更多相关文章
- Git学习笔记(一)创建版本库并添加文件
最近从廖雪峰老师的个人网站上学习git,做点笔记. ★★★★★ 先注册自己的username和email,否则会报如下错误: 注册:git config --global user.name &quo ...
- git学习笔记12-标签管理-版本
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...
- Git学习(1)-本地版本库的创建
我用的是Git-2.14.3-64-bit版本,在windows64位上运行的,把软件分享下链接:http://pan.baidu.com/s/1jIoZ7Xc 密码:13q2. 安装及配置自行百度, ...
- Git学习(二)——创建版本库、查看与回退版本
一.创建版本库 版本库,又名仓库(Repository),可以简单理解为一个目录,这个目录里的所有文件可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者将来某 ...
- Git学习笔记(2)——版本的回退,和暂存区的理解
本文主要记录了版本的回退,以及工作区,暂存区概念的理解. //开始之前,先回顾上次的内容,修改文件如下,并提交到版本库. Git is a distributed version control sy ...
- Git学习(3)创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件
远程库 远程库,通俗的讲就是不再本地的git仓库!他的工作方式和我们本地的一样,但是要使用他就需要先建立连接! 远程库有两种,一个是自己搭建的git服务器:另一种就是使用GitHub,这个网站就是提供 ...
- python学习笔记:安装boost python库以及使用boost.python库封装
学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...
- GIT学习笔记(1):创建版本库
GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...
随机推荐
- 网络编程:connect函数
TCP客户用connect函数来建立与TCP服务器的连接: cpp #include<sys/socket.h> int connect(int sockfd, const struct ...
- Android 网络编程--上传文件及相应的参数到服务器
之前一直在做SiteCheck的项目,所用到的知识大部分都涉及到网络编程方面,所以现在有时间先把它的使用方法及一些注意事项记录下来.在这里我用两种例子让大家了解它的使用方法: (1)上传图片及相应参数 ...
- 金山中学 rugular SRM 04 ——纪念我的第一次Ak
虽然只是一场比较简单的比赛 但奈何我也比较弱啊.... T1 一道计算概率的题目 T SRM 04 描述 给个长度为 n 的数列,每次操作能将数列打乱(RandomShuffle),问在期望下需要多少 ...
- 【洛谷 P2346】四子连棋(状态压缩,搜索)
其实这题可以直接二进制状压做,1表示黑棋,0表示白棋,另外记录下2个空点的位置就行了. 具体看代码(冗长): #include <iostream> #include <cstdio ...
- 遍历文档内容,得到HTML层级结构
嗯..没发现有写好的,那就自己写一个,刚好自己今天看了DOM操作的知识点,巩固一下. HTML可以表示为一个层次结构,生成的DOM Tree 就是类似与数据结构中的树一样,每个DOM节点都有它的chi ...
- 手机端的META
一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...
- es查询与聚合
""" 官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/aggregations.htm ...
- redis有string,hash,list,sets.zsets几种数据类型
1.string数据类型 可包含任何数据,是二进制安全的,比如图片或者序列化的对象set key valueset name hkset age 20get name 得到"hk" ...
- Linux内核态抢占机制分析【转】
转自:http://blog.csdn.net/yiyeguzhou100/article/details/53097665 目录(?)[-] 1非抢占式和可抢占式内核的区别 21 用户态抢占User ...
- Mysql启动服务提示系统找不到指定的文件
Mysql启动服务: C:\Windows\system32>net start mysql发生系统错误 2. 系统找不到指定的文件. 怎么还是报这个错?难道不是由于配置的原因?对,不是由于上面 ...