分布式版本控制系统Git简明教程(一)

分布式版本控制系统Git简明教程(一)

Git是目前世界上最先进的开源分布式版本控制系统。对于所创建的版本库中一切文本文件,网页,程序代码等发生的任何改动都会自动记录下来,例如当某次改动导致程序错误时可以回退至上一个改动前的版本,也方便了多人协作开发时每个成员都可以得到其他成员对项目的改动信息。而Git作为分布式版本控制系统,每个人的计算机就是一个服务器,改动信息在成员的计算机之间互相提交。摆脱了集中式服务器故障导致的成员版本控制系统瘫痪,只要一个成员的计算机可以正常工作,则可以将版本信息复制给其他成员,提高了系统的鲁棒性。
下面的教程包括了Git Bash中的常用基本操作,实用性强,易于上手。

一.创建版本库

 #在自定义的路径上创建learngit(可自命名,但路径不能有中文)文件夹准备作为版本库
$ mkdir learngit  
$ cd learngit   #进入learngit文件夹
$ pwd           #打印当前路径
/e/learngit
$ git init      #初始化本文件夹为git版本库
Initialized empty Git repository in /Users/michael/learngit/.git/
#初始化空版本库成功

现在我们的learngit文件夹就是一个版本库,所有放入文件夹的文件的任何改动都会被自动记录。目前还是空文件夹,下面我们向文件夹内添加文件。

二.添加文件并提交至Git来管理

我们先在learngit文件夹中新建一个txt文件,最好用VS code或Notepad++编辑创建txt文本文件。并在txt文件中,随意输入一些文字,如readme.txt:

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

下面把此有内容的txt文件添加至Git管理系统中:

$ git add readme.txt  #将readme.txt添加至Git版本控制系统中

如果没有任何返回,那么表示添加成功。下面对Git提交此次改动的说明,此说明用来记录每次改动的描述,便于向其他人或以后的自己表明此次改动目的是什么。

$ git commit -m "wrote a readme file" #说明此次改动是写了一个readme的文件
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)#而改动内容,Git会记录,一个文件改变,加入了两行
 create mode 100644 readme.txt

也可以添加(add)多个文件,进行一次说明(commit)。

三.修改文件并查看修改记录

对之前创建的readme.txt文件中修改如下,添加distributed单词于第一行:

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

下面我们看一下Git的状态,它会告诉我们版本库中哪个文件发生了变化:

$ 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 #我们可以看到readme.txt被修改了

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

下面我们看看版本区别,它告诉我们这个被修改的文件是怎么样被修改的:

$ 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 add和git commit提交修改后的文件并说明提交的描述。

四.查看历史版本并回退版本

多次修改提交后,我们看一看每次修改被记录形成的历史版本表:

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)#当前版本
Author: Li-Y-D <70194065+Li-Y-D@users.noreply.github.com>
Date:   Wed Nov 18 21:06:15 2018 +0800

    append GPL   

commit e475afc93c209a690c39c13a46716e8fa000c366#每次修改操作,会给一个版本ID
Author: Li-Y-D <70194065+Li-Y-D@users.noreply.github.com> #修改的作者
Date:   Wed Nov 18 21:03:36 2018 +0800 #修改的时间

    add distributed #之前提交每次修改时的说明可以清晰的知道修改的过程

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Li-Y-D <70194065+Li-Y-D@users.noreply.github.com>
Date:   Wed Nov 18 20:59:18 2018 +0800

    wrote a readme file

选择好回退的版本后,键入回退命令:

$ git reset --hard HEAD^ #HEAD^表示前一个版本,HEAD^^表示前前一个版本,也可以用指定修改操作ID的前几位来回退至指定版本,只需要ID的前几位
HEAD is now at e475afc add distributed

若回退至某版本后又想恢复之前的新版本,而不知道版本ID时,可以重现所有修改操作的版本ID:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

五.撤销修改

下面的图片展示了Git系统的本地结构。当我们在learngit文件夹中新建或放入文件时,文件就存在于工作区。learngit文件夹创立时会自动创建一个.git文件夹也就是版本库,其中最重要的就是暂存区(index/stage)和master分支。当我们把工作区的文件git add时,便提交到了暂存区(index),当我们把文件再git commit时,便提交到了master分支。
在这里插入图片描述
1.当我们在还未git add至暂存区(index)时,使用下面的命令来撤销:

git checkout -- file

2.当我们已经git add至暂存区(index),但未git commit至master分支时,使用下面的命令来撤销:

git reset HEAD <file>
git checkout -- <file>

3.当我们已经git commit至master分支时,只能参考第四节版本回退来撤销修改。
4.但当我们将本地版本库提交至远程版本库,那我们就没办法修改了。

六.删除文件

1.当我们把工作区的文件删除后,版本库内文件的删除用以下代码:

$ git rm <file>
$ git commit --m "delete file"

2.当我们误删工作区的文件,而未删除版本库内的文件时,可以通过以下代码从版本库恢复工作区的文件,但只能恢复最新的版本:

$ git checkout -- <file>

至此,分布式版本控制系统Git的本地仓库常用操作介绍完成,但这些操作仅限在一台计算机上实现,对于个人文件版本控制是足够了。如果需要和其他人协同完成一个项目而进行项目版本控制时,本地仓库是无法胜任的,这时就需要一台“服务器作”为远程仓库,每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

GitHub提供了Git仓库托管服务的,所以只要注册一个GitHub账号,就可以免费获得Git远程仓库,与他人实现协同开发。

相关内容将在分布式版本控制系统Git简明教程(二)分布式版本控制系统Git简明教程(三)中介绍。

欢迎大家持续关注!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值