Git,是Linus花了两周时间用C写的一个分布式版本控制系统。牛该怎么定义?

  其实,很多人都不care谁写了Git,只在乎它是免费而且好用的!So do I!

下面开始我们的学习:

  1.Git安装(略)。

  2.创建版本库

  首先,选择一个合适的地方(我选择了D盘,我的电脑是Win 7),常见一个空目录:

$ mkdir Git
$ cd Git
$ pwd//显示当前的路径
/d/Git

 注:Windows下,路径名不要包含中文,因为Git对中文支持不给力!

  第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in /d/Git/.git/

  这样就创建了你的Git仓库。

  接下来,我们上传一个文件到Git。编辑一个readme.txt文件,内容如下:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

  将其放到/d/Git目录下,因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

  将一个文件放到Git仓库需要两步:

    (1)使用git add将文件添加到仓库:

$ git add readme.txt

    (2)使用git commit将文件提交到仓库:

git commit -m "wrote a readme file"
[master 48b9a84] wrote a readme file
1 file changed, 2 insertions(+)

  注:git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

  commit可以一次提交多个文件:

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

  3.Git的命令很多,下面再学习几个吧!

  继续修改readme.txt文件:

Git is a distributed version control system.
Git is free software.

  git status命令看看结果:

$ 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.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

  git status查看仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

  虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.

  git diff查看不同!

  在工作中,我们可能提交了几千个文件,如果想看历史记录,可以使用git log命令:

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800 append GPL commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
 add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
 wrote a readme file
………………………………………………………………………………
………………………………………………………………………………

commit 0f71dba115d8830212fd1736a02a077ce2e91699
Author: lixiaolun <303041859@qq.com>
Date: Thu Jan 15 22:06:05 2015 +0800

wrote a readme file
(END)

  注:最后你可能会碰到这个(END),此后你怎么点都没有用。那么现在你要输入:wq或:q退出。这个命令同linux指令。

  git log命令显示从最近到最远的提交日志。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上
--pretty=oneline参数:

$ git log --pretty=oneline
fae7920797cbe9057e7e5ced1fdc79d1eb592758 commit a file readme
33cff68fd77dcbfdb8644a8d3f1c34175830b1a6 text1.txt commit
48b9a84010813eecb1e3acca555d1b704c9d5930 wrote a readme file
2d874d572e805c1825200458a8a8aa9e55429d8f 2015-1-30 upload
86edb2f2f658578f993532c83c5c368d2c4a7c4c local_gitgub
7d3197611468b3d7dd6b861829e19de626c22bc8 remove text1.txt
d9ee12aeca6cacf25f6b02095d03d5a9f03d3c5e remove text.txt
d79f7ec6a470f0efb1afee1accb28fae3ef3a995 add test.txt
24a93f3894fec142cbc11bc508f2407635380c81 git tracks changes
c22b22edea6b0f9fff3c4d73b3351c49e966a85e add 3 text.txt
57c62b9d4e94c19a9484ca6c6c6e84f18965b41a understand how stage
f2bbf87ef050bb70d98390cf8ca1680ed0dff297 modify reamde.txt
fe829f988f43647933edb35f347171c54187af4a add a new word distr
0f71dba115d8830212fd1736a02a077ce2e91699 wrote a readme file

  友情提示:你看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。

  时光穿梭之版本回退!!

  如果你提交的一个文件,发现还不如你你上一个版本好,赶紧回退!怎么做呢?

  首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

  回退到上一个版本的命令git reset

$ git reset --hard HEAD^

  --hard参数有啥意义?这个后面再讲,现在你先放心使用。

  查看文件命令cat readme.txt:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.

  git reflog记录了每一次命令:

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

  前面的数字是commit id。知道commit id可以回退上一次执行的命令,回退命令为git reset --hard <commit id>:

$ git reset --hard 3628164

感谢廖叫兽:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137402760310626208b4f695940a49e5348b689d095fc000

Git学习笔记一--创建版本库、添加文件、提交文件等的更多相关文章

  1. Git学习笔记02-创建版本库

    版本库就是一个目录,这个目录里面的所有文件都会被Git管理,每个文件的修改,删除都能追踪.以便在某个时刻追踪历史记录,或者还原 路径切换,查看文件命令和linux差不多,cd 文件路径  ls查看路径 ...

  2. Git版本控制工具(一)----git的安装及创建版本库

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

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

    Git 版本库创建 什么是版本库(repository)? 可理解为文件仓库.由Git管理每个文件的新增.修改及删除,但这个仓库可以追溯历史.可还原至任意历史节点. 版本库创建 创建一个版本库非常简单 ...

  4. Ubuntu下Git的使用之创建版本库

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

  5. Git 的安装和创建版本库 。

    Git 的优点就不再多说了 .直接进入正题吧 . 安装Git 首先可以尝试输入 Git 看看有没有反映 . $ git The program 'git' is currently not insta ...

  6. Git学习笔记(2)-创建仓库

    一.Git简介 1.Git是什么 Git是分布式版本控制系统 2.Git有什么特点 (1)Git是分布式的SCM,SVN是集中式的 (2)Git每个历史版本存储完整的文件,SVN存储文件差异 (3)G ...

  7. Git教程-安装与创建版本库

    Git是一个分布式版本控制系统,他通过命令行使用的工具,Github是提供Git仓库托管服务的网站 安装参考: https://www.liaoxuefeng.com/wiki/89604348802 ...

  8. Git的安装和创建版本库

    1.Git是分布式版本控制系统 2.安装Git 下载Git后,按照默认设置即可实现安装,安装完毕后点击git目录下的Git Bash 输入以下命令符: git config --global user ...

  9. git 学习之什么是版本库

    什么是版本库? 我们一般把版本库也叫仓库(repository),其实我们可以简单的把它看成一个目录,只不过目录里面的文件都会由 Git 进行管理,当我们对文件进行修改.删除.Git 都可以对其进行跟 ...

随机推荐

  1. gcc、make、makefile、cmake、cmakelists区别

      文章来源:见下!   作者:辉常哥链接:https://www.zhihu.com/question/36609459/answer/89743845来源:知乎著作权归作者所有.商业转载请联系作者 ...

  2. PHP文件包含小结

    协议 各种协议的使用有时是关键 file协议 file后面需是///,例如file:///d:/1.txt 也可以是file://e:/1.txt,如果是在当前盘则可以file:///1.txt 如果 ...

  3. 洛谷——P3908 异或之和

    P3908 异或之和 题目描述 求1 \bigoplus 2 \bigoplus\cdots\bigoplus N1⨁2⨁⋯⨁N 的值. A \bigoplus BA⨁B 即AA , BB 按位异或. ...

  4. 动若脱兔:深入浅出angr--初步理解符号执行以及angr架构

    一:概论 angr作为符号执行的工具,集成了过去的许多分析方式,它不仅能进行动态符号执行,而且还能进行很多静态分析,他在分析二进制程序中能发挥很大的作用,下面为一些应用: 1:利用符号执行探究执行路径 ...

  5. Sqli-labs less 3

    Less-3 我们使用?id=' 注入代码后,我们得到像这样的一个错误: MySQL server version for the right syntax to use near "&qu ...

  6. 【数据结构】 最小生成树(二)——kruskal算法

    上一期说完了什么是最小生成树,这一期咱们来介绍求最小生成树的算法:kruskal算法,适用于稀疏图,也就是同样个数的节点,边越少就越快,到了数据结构与算法这个阶段了,做题靠的就是速度快,时间复杂度小. ...

  7. Codeforces Round #453 ( Div. 2) Editorial ABCD

    A. Visiting a Friend time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. python基础之封装与绑定方法

    封装 1.什么是封装: 封:属性对外隐藏,但对内开放 装:申请一个名称空间,往里装入一系列名字/属性 2.为什么要封装: 封装数据属性:不让外部使用者直接使用数据,需要类内部开辟一个接口,让外部通过接 ...

  9. [BZOJ4304]/[JZOJ3486]道路改建

    题目大意: 给你一个有向图,你可以把其中某一条单向边改成双向边,使得图中最大的SCC最大. 问SCC最大能是多少,有哪些方案? 思路: 对原图缩点后就变成了一个DAG. 我们在DAG上DP,记录一下从 ...

  10. LNMP一键包屏蔽PHP报错信息开启方法

    在 php-fpm.conf中的[www]下添加php_flag[display_errors] = On 重启php-fpm即可 /etc/init.d/php-fpm restart