Git基础(一)———Git的安装以及本地库的操作

Git是什么?(为什么要学Git)

用最官方的话来说,Git是目前世界上最先进的分布式版本控制系统

那么,究竟什么是版本控制系统呢?它有什么优越之处呢?

我们一定或多或少有过这样的经历:
对一个程序Program,我们想改动其中一段代码,但又怕改了之后功能不尽如人意,万一以后又想改回来怎么办?
于是我们先将这个文件复制一份Program(2),再对它进行修改
后面用户又有了新的要求,于是我们就有了Program(3),Program(4)…突然有一天,我们发现最近几次改动效果不太好,还是以前的某个版本好,于是我们决定恢复到以前的某个版本,可是,看着这十几个甚至几十个项目,我们已经分不清哪个具体更新了哪些功能,只好一个一个打开来看,十分麻烦。
最要命的是,如果有一个同伴和我们一起开发这个项目,我们把Program复制了一份给他,等他完成了他的部分再给我们发回来,我们需要想一想,在他对项目做修改的同时,我们也对项目做了修改,此时我们就需要找到项目被修改的地方,把两个人做的修改合并起来,这就更麻烦了。
这时我们就想:要是有一个软件,可以记录我每次对文件的改动,并且可以和其他人一起协作就好了

Git就是这样一个软件,它可以记录我们对文件的每一次改动,并且可以很轻松的实现多人协作完成项目

Git的安装

在linux上安装Git

在Ubuntu或Debian中,直接输入以下命令:

		sudo apt-get install git

如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。

在Mac OS 上安装Git

如果你正在使用Mac做开发,有两种安装Git的方法。

一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档

第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

在Windows上安装Git

在windows上使用Git,可以直接在官网下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在git-bash命令行界面输入

		git config --global user.name "Your Name"
		git config --global user.email "Your E-mail"

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

创建版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建一个版本库也非常的简单,首先,在一个合适的位置新建一个文件夹并进入这个文件夹内

		mkdir test
		cd test

第二步,使用git init命令即可将当前目录变为Git可以管理的仓库

$ git init
Initialized empty Git repository in F:/test/.git/

创建版本库不一定要用一个空的文件夹,用已有的文件夹也是可以的,不过在学习阶段最好不要用重要的项目文件来尝试哦

向版本库中添加文件

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

不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。

因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

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

下面我们来给我们的版本库中添加第一个文件
首先,创建一个文件readme.txt,内容如下:

		My name is XiaoWang.
		I'm learning Git.

一定要保存在test目录下(子目录也可以)
然后第1步:使用git add readme.txt这个命令,告诉Git,把这个文件添加到库中

$ git add readme.txt

第2步:使用==git commit -m “add readme”==命令提交刚才的操作,并描述刚才的操作“add readme”,方便我们以后查看具体做了什么修改

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

注意:这里的-m "add readme"是可以省略的,如果省略文件也会添加到版本库中,但是建议每次提交修改时都加上合适的描述,这个描述是写给我们以及和我们合作完成项目的队友看的,加上描述可以让我们很明显的看出每次提交都做了什么操作,以便未来可能的版本回退等操作。

Git的基本操作

版本回退

我们来对我们的版本库做一系列操作

首先我们给我们的readme.txt加上一行文字

		My name is XiaoWang.
		I'm learning Git.
		Git is very useful.

然后我们再提交一次修改

$ git add readme.txt

Administrator@DESKTOP-C7JV0L3 MINGW64 /f/test (master)
$ git commit -m "add a line in readme"
[master f0863f6] add a line in readme
 1 file changed, 2 insertions(+), 1 deletion(-)


再次修改readme.txt

		My name is XiaoWang,a student.
		I'm learning Git by writing a blog.
		Git is very useful and interesting.

然后提交

		git add readme.txt
		git commit -m "change some words"

这个时候我们想要回到某一个版本,但是我们现在并不知道我们需要的究竟是上个版本,还是上上个版本,我们该怎么办呢?
这个时候我们可以用git log命令查看版本库现在的状态

$ git log
commit 7337713c70e1a3997f19abea195cfe09888b560c (HEAD -> master)
Author: WangChao <2335434262@qq.com>
Date:   Mon Aug 3 18:27:47 2020 +0800

    change some words

commit f0863f601e8437082241d8a17809f0c6a49df844
Author: WangChao <2335434262@qq.com>
Date:   Mon Aug 3 18:26:46 2020 +0800

    add a line in readme

commit 5ad1b6aa8043b504a47efa851b9151bce99dca02
Author: WangChao <2335434262@qq.com>
Date:   Mon Aug 3 18:26:01 2020 +0800

    add readme.txt

通过git log命令我们可以详细的看到每次对版本库所做的修改,以及我们的文字描述,这时我们使用git reset命令

$ git reset --hard HEAD^
HEAD is now at f0863f6 add a line in readme

我们再去查看readme.txt,发现果然变成了上次修改之前的状态

		My name is XiaoWang.
		I'm learning Git.
		Git is very useful.

这时我们再使用git log命令查看一下版本库的状态

$ git log
commit f0863f601e8437082241d8a17809f0c6a49df844 (HEAD -> master)
Author: WangChao <2335434262@qq.com>
Date:   Mon Aug 3 18:26:46 2020 +0800

    add a line in readme

commit 5ad1b6aa8043b504a47efa851b9151bce99dca02
Author: WangChao <2335434262@qq.com>
Date:   Mon Aug 3 18:26:01 2020 +0800

    add readme.txt

可以看到上次的修改记录不见了。
那么,这时如果我们又后悔了,不想撤回刚才那一条操作了,还有办法吗?答案是有的。
只要我们没有关掉git bash命令行界面,我们可以向上翻,找到刚才的记录,发现上一个版本的commit id是73377……
这时我们就可以指定回到这个版本

$ git reset --hard 73377
HEAD is now at 7337713 change some words

我们再去查看readme.txt文件,发现它又变回来了

		My name is XiaoWang,a student.
		I'm learning Git by writing a blog.
		Git is very useful and interesting.

这时,有些人就想了,这样太麻烦了,还要向上翻好多,而且万一我在后悔之前关闭了bash界面,被我回退的版本就找不回来了吗?
当然还是可以的,Git给我们提供了后悔的机会,我们可以使用git reflog命令来查看我们的每一次命令

$ git reflog
7337713 (HEAD -> master) HEAD@{0}: reset: moving to 73377
f0863f6 HEAD@{1}: reset: moving to HEAD^
7337713 (HEAD -> master) HEAD@{2}: commit: change some words
f0863f6 HEAD@{3}: commit: add a line in readme
5ad1b6a HEAD@{4}: commit (initial): add readme.txt

用这条命令,配合git reset命令,我们可以很轻松的将版本控制到我们想要的版本,是不是很好用呢?

管理修改

Git相比其他版本管理系统的优势在于,Git跟踪管理的并非是文件本身,而是对文件的修改。
为了说明这一点,我们来做一个实验,首先给我们的readme.txt文件再加一行

		My name is XiaoWang,a student.
		I'm learning Git by writing a blog.
		Git is very useful and interesting.
		Git track changed.

然后我们使用git add将该文件加入到暂存区中

$ git add readme.txt

先不要提交,我们再次对文件的内容进行修改

		My name is XiaoWang,a student.
		I'm learning Git by writing a blog.
		Git is very useful and interesting.
		Git track changed of files.

然后再提交我们的操作

$ git commit -m "git track changed"
[master 732c618] git track changed
 1 file changed, 2 insertions(+), 1 deletion(-)

使用git status命令可以查看当前修改的状态
我们使用git status命令来看看当前的状态

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

可以看到,第二次修改并没有被提交到版本库中
如果你还是不相信,我们可以使用git diff HEAD – readme.txt来查看版本库中的最新版本的文件与当前文件的不同

$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index dcdd8d8..0cb45cb 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 My name is XiaoWang,a student.
 I'm learning Git by writing a blog.
 Git is very useful and interesting.
-Git track changed.
\ No newline at end of file
+Git track changed of files.
\ No newline at end of file

可见,第二次修改确实没有被提交。
这也证明了Git跟踪管理的是不是文件,而是修改

撤销修改

这里的撤销修改分为两种情况:
第1种:我们错误地修改了文件的内容,万幸的是,我们并没有git add文件到暂存区
这时我们用git checkout – file就可以丢弃文件的修改
比如刚才我们的第二次修改并没有提交上去,现在我们不想要这次修改了,我们就可以使用

$ git checkout -- readme.txt

我们再次打开文件,就会发现,文件回到了修改前的状态

		My name is XiaoWang,a student.
		I'm learning Git by writing a blog.
		Git is very useful and interesting.
		Git track changed.

第2种:我们不但错误的修改了文件内容,而且还用git add命令把它添加到了暂存区中
我们还是用实例来说明,我们把readme.txt改成下面这样,并添加到暂存区中

		My name is XiaoWang,a student.
		I'm learning Git by writing a blog.
		Git is very useful and interesting.
		Git track changed.
		This is a mistake.

我们用git status查看一下,发现我们只是将文件添加到了暂存区,但是还没有提交

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

这时我们可以用命令git reset HEAD file把暂存区的修改撤销掉

$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

现在用git status查看暂存区的状态,发现暂存区是干净的

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

然后再撤销工作区内文件的修改(见第1种情况),这样,就完成了对操作的撤销。

那么如果我们已经把错误修改的文件提交了呢?
还记得之前讲的版本回退吗?

删除文件

在Git中,删除文件也是一种修改
首先,我们在我们的test目录下新建一个test.txt文件,把它加入并提交到版本库中

$ git add test.txt

Administrator@DESKTOP-C7JV0L3 MINGW64 /f/test (master)
$ git commit -m "add test.txt"
[master bd5a34c] add test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

我们删除一个文件一般直接在该目录中删除,或者是使用rm命令删除

$ rm test.txt

git status命令可以告诉我们哪些文件被删除了

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    test.txt

这时,如果我们确定要从版本库中删除这些文件,那么我们就要使用git rm file命令并提交

$ git rm test.txt
rm 'test.txt'

Administrator@DESKTOP-C7JV0L3 MINGW64 /f/test (master)
$ git commit -m "remove test.txt"
[master 9a750b8] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt

做完这些,我们检查目录就会发现,test.txt确实被我们删除了

作者是一个准大三的学生党,这是我第一次写博客,写的不好,还忘多多包涵
还有,这是我一边学习一边自己做的总结,如果有错误的地方,敬请指正
我会尽快更新后面的内容哒

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值