Git使用GitGit

干货:Git入门详解

2018-10-01  本文已影响23人  长肉肉呱
就不给你看俺美丽的容颜

之前讲过如何搭建gitserver,来实现自己的私有git服务器,后来有人问git到底是个什么东东,应该怎么用?下面就来详解一下git这个神奇的工具,帮助大家解惑一下,顺便总结一下一些常用的git命令,希望能帮到大家。喵~

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。好吧,什么是分布式版本控制系统?如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:

是不是很乱.png
过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。 更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便? 这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本管理清晰
运用git,你可以轻松记录自己在什么时候修改了什么,并且可以很轻易的将文件像时光穿梭一样回退或者向前到某个版本,这便是版本管理工具的作用。
(以上大部分转自廖雪峰老师的git简介)

很多人刚开始搞不清git和github,其实这两个东西是完全不同的,git是一个版本管理工具,而github则是全球最大的同性交友平台(滑稽脸(~ ̄▽ ̄)~),其实github是一个用git作为版本控制的代码托管平台,每个人在上面都可以存放自己的代码库或者小说文章之类的。

git工作原理图.png

主要涉及到四个关键点:

工作区:本地电脑存放项目文件的地方,比如learnGitProject文件夹;

暂存区(Index/Stage):在使用git管理项目文件的时候,其本地的项目文件会多出一个.git的文件夹,将这个.git文件夹称之为版本库。其中.git文件夹中包含了两个部分,一个是暂存区(Index或者Stage),顾名思义就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里;

本地仓库:.git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;

远程仓库:不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;

这些是git里面基本的概念,暂时不明白也没关系,下面我们实际操作一下,应该就会加深理解。

在Mac OS X上安装Git

首先安装homebrew 然后通过homebrew安装git。HomeBrew是mac系统上的软件包管理工具,能在mac中方便的安装软件或者卸载软件,首先说安装homebrew。打开官网有一个指令,可以直接复制粘贴到终端:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用homebrew安装git

brew install git

然后执行

git --version

可以查看git是否安装成功。

在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!



安装完成后,还需要最后一步设置,在命令行输入:

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

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。类似于用户名之类的,最好填写容易分辨出这台PC的。
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

第一步

首先,选择一个合适的地方,创建一个空目录:

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

第二步

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

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的。
这个创建的文件夹就是你的workspace,即之前提到的工作区。

第三步

把文件添加到版本库
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

使用Windows的童鞋要特别注意
千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载sublime代替记事本,功能强大!

现在我们在文件夹下编写一个readme.txt文件,内容如下:

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

之后,cd到文件夹下,我们需要执行几个命令,这几个命令要熟记:
第一步,用命令git add告诉Git,把文件添加到仓库:

git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。这时候我们相当于把修改从工作区放到了暂存区(上面提到的)。
第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
这时候我们相当于将暂存区的修改提交到了本地仓库。

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

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

最后可以一次性提交到本地的仓库。

上一部分我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改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 status命令看看仓库的当前状态:

$ git status
On branch master
nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。

现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:
版本1:wrote a readme file

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

版本2:add distributed

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

当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

好了,现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本,也就是wrote a readme file的那个版本,怎么做呢?

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

使用git reset命令:

git reset --hard HEAD^

--hard参数有啥意义?这个后面再讲,现在你先放心使用。执行后可以打开文件看下确实被还原了!

这个时候看下git log:

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

就变成只有这一个版本了。这个时候有人问了怎么再回到最新的呢?这个就先留给读者自己去探索了<( ̄︶ ̄)>(请放心,肯定是可以再回去的)。

git作为一个超级强大的版本管理工具,是可以肆意穿梭的,所以有很多命令读者朋友们可以自己去探索,系统的学习git这里推荐两个网站,也是本入门文章的参考来源:

给点个赞再走呗(/ ̄∇ ̄/)

上一篇下一篇

猜你喜欢

热点阅读