git学习笔记——本地

小追兵专栏

一、简介

svn的时代慢慢的走到向尾声,git正在慢慢取代svn。

我也从svn换成Git作为版本控制软件了。下面我们简单的学习下Git的使用。

这里我们是当成一片学习笔记。适用于初学者。

  • 什么是Git?Git是一款免费、开源的分布式版本控制系统。不论怎么形容,它就是用来做版本控制的。

  • 什么是分布式:简单粗暴的理解为分散的,分开的,每一个个体是单独的,这些单独个体也可组合为一个整体的大系统。

  • 举例来说:这里Git是分布式,就是每个用户计算机都是一个版本控制库,可以不依赖中央服务器。而相对svn就是集中式版本控制,每个计算机不能作为一个单独的版本控制库,只能依赖中央服务器。

这里盗用别人一张图:

图片发自简书App

大神也对图中的错误进行了如下更新:

1.更改了一个错别字,git fetch操作的“单”=>“但”。由@leky指出。

2.reset --head更改为reset --hard。由@dtopn指出。

3.分支篇新增git rebase $other_branch操作。由@dtopn提出。

下面用到的git命令:

 git config --global user.name "Your Name"
 git config --global user.email "email@example.com"
 
 cd gittest
 touch README.txt
 git add -A
 git add --all
git add README.txt
git commit -m "readme.txt第一次提交"
git diff README.txt
git log
git log –pretty=oneline
简写为
git log --oneline
//由@lovexiaov提供的简写命令
git reset  --hard HEAD^
git reset  --hard HEAD~100
git reflog
git reset  --hard  c8dd*** 版本号
git checkout  --  readme.txt

如果你都比较熟悉,可以不用接着往后看了。

这里我们以Mac电脑作为演示,Windows可以下载 msysgit,打开Git Bash,其他完全一样。

二、配置标识

下来我们说说git的第一条命令:
在mac的 终端 下面输入:

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

git作为一个分布式版本管理系统,它需要每一个用户的一个标识,上面填写的"Your Name""email@example.com"就是我们自己的唯一标识。

--global这个参数让我们的标识在这台电脑的所有位置都生效,如果我们需要对某个单独的库进行配置,也是可以的。

三、创建版本库

1、如何管理我们的一个项目呢?假定我们需要管理的目录是gittest文件夹,如图:


这里写图片描述

2、在终端中,我们用cd gittest命令进入我们的项目目录gittest,如图:

这里写图片描述

现在我们已经在gittest目录下了,接下来,我们用如下命令创建版本库:

git init
这里写图片描述

这时git会在这个目录下创建一个.git文件,这就是我们的版本库。我们可以通过ls -a命令查看.git是否真的被创建。.git是用来管理和跟踪文件的库,没事不要对.git进行手动删除或修改,这样会破坏版本控制的结构,导致版本库被破坏,如图已被创建:

这里写图片描述

现在我们创建一个README.txt文件假设为我们项目文件,把这个文件添加到我们的版本库中。在这里我用touch README.txt命令创建一个README.txt文件,把它作为我们的管理对象。如图:

这里写图片描述

我们去文件夹中查看,文件已经创建,如图:


这里写图片描述

现在把这个txt文件作为我们项目文件,添加到版本库中进行管理。

命令:

git add --all

或者

git add -A

这里是把我们项目目录gittest下面的所有文件添加到了Git的缓存区。
也可以单独添加需要控制的文件:

git add README.txt

没有任何提示,说明添加成功。
如图:


这里写图片描述

命令:

git commit -m "readme.txt第一次提交"

这里我们将README.txt文件提交到了仓库,如图:


这里写图片描述

补充这里可以看到,git还吧一个.DS_Store的文件提交到了版本库,.DS_Store文件是mac系统的文件夹下的隐藏文件,这是因为我用的是git add --all命令,所以把目录下的所有文件都提交了。

我们看看还有什么文件没有被提交,用git status命令,如图:

这里写图片描述

可以看到,已经没有可commit的文件了。

可是我们现在对README.txt文件做出修改,我们添加了内容111……和222……如图:


这里写图片描述

现在我们用git status查看git的状态,如图:

这里写图片描述

git告诉我们,文件能容被修改,但没有提交。

我们通过git diff README.txt查看文件,如图:

这里写图片描述

可以看到我们的README.txt添加了两行新内容。

现在我们对修改后的文件进行提交,和前面一样:

git add -A
git commit -m "第二次提交,添加了内容111和222"

之后我们用git status看看git的状态,还有什么没有提交,如图:

这里写图片描述

学会了这个,我们继续修改README.txt文件内容,增加333……,并且提交,如图:


这里写图片描述

这里写图片描述

三、版本回退

接下来,我们做版本回退,我们刚才增加了333……,可是发现不理想,或者有重大问题,舍弃不需要增加333……后的这个版本了,我们想退回222……那里。

我们现在可以使用命令 git log 查看提交的日志:如图

这里写图片描述

可以看出,我们对一共提交了三次。亦可以看出提交的顺序,
如果看着不爽,也可以用

git log –pretty=oneline
简写
git log --oneline
//由@lovexiaov提供的简写命令

结果如图:


这里写图片描述

这样有用写信就显示在一行了,前面红色圈里的数字符号,是只版本号,后面箭头指的是提交时写的提交信息。

现在我们用下面命令:

git reset  --hard HEAD^

是指:退回上一个版本,这里我们的上一个版本是只有两行,第一行111……第二行是222……,第三行的333……还没有添加。让我们看看效果吧!如图:


这里写图片描述

文件已经是下图的样子了:


这里写图片描述

回退之后,用git log可以看到如下内容:

这里写图片描述

可以看到,333……已经不再了。一次类推,要回退上上个版本就是HEAD^^,那上上上个版本就是HEAD^^^,然后如果有100个版本,你不介意就一直接 ^ 吧。当然也可以用更方便的方法了:

git reset  --hard HEAD~100

回退100个版本。

我们还有一种回退方法,指定版本号回退。假定我现在又想退回添加333……的那个版本去,我们用git log查看了,只能看到第一次,和第二次提交的内容,第三次的我们看不到,我们该怎么做呢?

git reflog

这样我们如同看到了三个版本的版本号:


这里写图片描述

我们已经看到了我们第三次提交的版本号了:

git reset  --hard  c8ddd30

这里的“c8ddd30”是版本号,我们用git reflog可以查看

这里写图片描述

现在查看下README.txt,发现文件中的内容有回到了三行。如图:


这里写图片描述

·

五、工作区和暂存区的比较和理解

    工作区:电脑上项目的目录,比如目录下testgit里的文件README.txt(.git隐藏目录版本库除外),还有之后在目录中增加的文件,和子目录都是工作区。

  版本库 (Repository) : 我们git init命令后,在gittest目录下生成的.git就是版本库。它不是工作区,.git里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。

我们前面说过使用Git提交文件到版本库有两步:

  • 第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。

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

现在我们做了下面操作:
我们在前面333……的基础上有增加了一行444……,可是还没等我们提交的时候,我们想放弃这次修改,不要增加的444……了。这里我们要进行撤销操作:

1、手动删除添加的444……内容。
2、版本回退到上一个版本。

git reset  --hard HEAD^

3、放弃此次编辑,把工作区做的修改全部撤销。

git checkout  --  readme.txt

三个方法根据需要,和方便性,可以自行选择。

注意

    命令git checkout -- readme.txt 中的 -- 很重要,如果没有 -- 的话,那么命令变成创建分支了。

现在我们想删除项目中的文件b.txt,项目中有些文件我们用不到了,我们需要删除,以保证项目的感觉。

1、我直接在gittest文件目录中把文件b.txt删了,或者使用如上rm命令:rm b.txt

2、如果想把库中的b.txt也删除了,那我们只要commit已经删除过b.txt的项目到库中就好了。因为提交的项目里没有b.txt,所以也就等等删除了库中的b.txt.

3、如果没commit前,想回复刚才删除的工作区中的b.txt,用将库里的checout一份。

git checkout  -- b.txt

·
·

远程库的学习笔记,会在下一篇中详细说明。

最后:有需要Shadowsock翻墙账号可以私聊。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容