GIT(分布式版本控制系统)
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
简单入门创建版本库Repository与第一次提交文件
介绍一下什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
一、创建Git版本库:
$ cd /d/
$ mkdir MyGit
$ cd MyGit
$ pwd
/d/MyGit
接下来输入 git init 命令即可将这个目录变为一个Git版本库,并且此目录中多了一个.git的隐藏目录。可以ls 加上参数ah看见这个隐藏目录。(这里我是在我本机上的D盘下创建了一个MyGit目录 "pwd" 是输入当前目录的命令)
$ git init
Reinitialized existing Git repository in D:/MyGit/.git/
$ ls -ah
./ ../ .git/ t.txt
二、Git添加一个文件到版本库
首先创建一个文件:这里我暂时创建一个t.txt文本。创建完成后
第一步:git add t.txt 将此文件加入版本库
第二部:git commit -m "提交的描述" 提交版本库
$ git add t.txt
$ git commit t.txt
Aborting commit due to empty commit message.
$ git commit t.txt -m "test commmit"
[master 990508d] test commmit
1 file changed, 3 insertions(+), 1 deletion(-)
git commit
命令,-m
后面输入的是本次提交的说明,若没有commit git会提示我们没有comment内容。
- 使用命令
git add <file>
,注意,可反复多次使用,添加多个文件; git add . 表示添加所有文件 - 使用命令
git commit -m <message>
,完成。
三、版本回退
我们可以通过git add 并 git commit 将文件提交到本地仓库,但是如果某一天我们提交了一段含有Bug的代码到了本地仓库,导致程序崩溃了怎么办,一个一个的再改回来吗。或者是我们将仓库中的代码误删了呢。那岂不是几个月的心血都没了。这时我们有Git的版本控制系统来帮助我们。
首先第一个命令: git log 可以帮助我们查看最近的历史记录:
$ git log
commit 990508d9e691641eab39bf3f1a6595c900b44918 (HEAD -> master)
Author: JW Lee <136958374@qq.com>
Date: Sat Mar 30 21:23:13 2019 +0800
test commmit
commit d767f3780dc8e6a13ceca817cfd8d0dce78aedba
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:25:59 2019 +0800
version 2
commit f59f0bcb663cca2ab06421d776b1466e0f845fd3
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:25:30 2019 +0800
version 1
commit 19b7cbd947970f08a9b0bd4b22ab692c0d8e1447
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:22:23 2019 +0800
test test test
丛记录中可以看到我对最开始提交的t.txt文件进行了四次提交,并且可以看大上面 那些 19b7cbd94....等一大串数字就是版本号。
Git的版本回退命令是: git reset HEAD^
在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
$ git reset --hard HEAD^
HEAD is now at d767f37 version 2
再输入 git log 发现果然回到了上一个版本
$ git log
commit d767f3780dc8e6a13ceca817cfd8d0dce78aedba (HEAD -> master)
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:25:59 2019 +0800
version 2
commit f59f0bcb663cca2ab06421d776b1466e0f845fd3
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:25:30 2019 +0800
version 1
commit 19b7cbd947970f08a9b0bd4b22ab692c0d8e1447
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:22:23 2019 +0800
test test test
还有一种回退版本的方式就是首先 git log 找到 版本号 然后再git reset 回到指定的版本。版本号没必要写全,写出前几位就可以
$ git log
commit d767f3780dc8e6a13ceca817cfd8d0dce78aedba (HEAD -> master)
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:25:59 2019 +0800
version 2
commit f59f0bcb663cca2ab06421d776b1466e0f845fd3
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:25:30 2019 +0800
version 1
commit 19b7cbd947970f08a9b0bd4b22ab692c0d8e1447
Author: JW Lee <136958374@qq.com>
Date: Tue Mar 12 15:22:23 2019 +0800
test test test
$ git reset --hard 19b7c
HEAD is now at 19b7cbd test test test
还有一个关键的与 git log 相关的命令是 git reflog
用来记录你的每一次命令:
$ git reflog
19b7cbd (HEAD -> master) HEAD@{0}: reset: moving to 19b7c
d767f37 HEAD@{1}: reset: moving to d767
d767f37 HEAD@{2}: reset: moving to HEAD^
990508d HEAD@{3}: commit: test commmit
d767f37 HEAD@{4}: reset: moving to d767
ab504a6 HEAD@{5}: reset: moving to HEAD^
68f4c25 HEAD@{6}: commit: test commit
ab504a6 HEAD@{7}: commit: s
d767f37 HEAD@{8}: reset: moving to d767
19b7cbd (HEAD -> master) HEAD@{9}: reset: moving to 19b7
d767f37 HEAD@{10}: reset: moving to d767
19b7cbd (HEAD -> master) HEAD@{11}: reset: moving to HEAD^
f59f0bc HEAD@{12}: reset: moving to HEAD^
d767f37 HEAD@{13}: reset: moving to HEAD^
96942e8 HEAD@{14}: commit: b version 1.1
d767f37 HEAD@{15}: commit: version 2
f59f0bc HEAD@{16}: commit: version 1
19b7cbd (HEAD -> master) HEAD@{17}: commit (initial): test test test
四、工作区与暂存区的概念
工作区就相当于电脑中目录,比的如我开始创建的MyGit文件夹就是一个工作区:
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
我们有一个命令可以查看暂存区的状态的命令 git status
首先我先修改我工作区中的文件 t.txt 然后 git add . 将文件加入暂存区 接着 输入 git status 命令可以发现它提示我 t.txt 修改了
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: t.txt
此时我再创建一个a.txt文件通过 git add 命令也加入暂存区
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: a.txt
modified: t.txt
接着我再执行 git commit 将暂存区的文件 一次性提交到本地仓库中去,再输入 git status查看下状态, 此时就发现工作区就是“干净”的:
$ git commit -m "commit a.txt and t.txt"
[master 1a547c2] commit a.txt and t.txt
2 files changed, 2 insertions(+)
create mode 100644 a.txt
$ git status
On branch master
nothing to commit, working tree clean
流程就是 工作区的文件先都会 被 add 到 暂存区 最终 都会被commit 到 分支上去。
五、管理与撤销修改
未完待续。。。。。