1、安装git仓库
[root@a ~]# yum install -y git
安装完成后,还需要最后一步设置,在命令行输入:
[root@a ~]# git config --global user.name "Your Name"
[root@a ~]# git config --global user.email "email@example.com"
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
2、创建版本库(repository)
选择合适位置,创建一个空目录
[root@a ~]# mkdir /soft/learngit&&cd learngit
通过命令将该目录变成git库
[root@a learngit]# git init
[root@a learngit]# ls -ah
. .. .git
[root@a learngit]#vim readme.txt
把文件添加到仓库
[root@a learngit]#git add readme.txt
把文件提交到仓库
[root@a learngit]#git commit -m "this is a readme.file"
多次添加,一次提交。因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的
3、版本修改、回退等操作
[root@a learngit]# vim readme.txt
[root@a learngit]# 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
被修改过了,但还没有准备提交的修改
[root@a learngit]# git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..5a93dd9 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@
Git is a version control system.
Git is free software.
+Git is a distrebuted version control system.
+Git is free software.
命令git diff能查看具体修改了什么内容,这里是增加了后两行。知道了修改内容,再使用git add 和git commit就放心多了。
git版本控制系统可以告诉我们历史记录,使用git log命令查看
[root@a learngit]# git log
commit 02bf7cf77fc019aee262060a11c17b278e4c2e33
Author: feng <abc@abc.com>
Date: Sat Jun 1 11:20:07 2019 +0800
append GPL
commit a5b274ffa6b771afcab33a74aa686695b0338263
Author: feng <abc@abc.com>
Date: Sat Jun 1 11:05:30 2019 +0800
add two GIT colum
commit f7b8f9dc3387a55fe9f0d9bea8c569a689a59332
Author: feng <abc@abc.com>
Date: Sat Jun 1 10:23:14 2019 +0800
wrote a readme file
其中--pretty=oneline
参数简化输出信息
[root@a learngit]# git log --pretty=oneline
02bf7cf77fc019aee262060a11c17b278e4c2e33 append GPL
a5b274ffa6b771afcab33a74aa686695b0338263 add two GIT colum
f7b8f9dc3387a55fe9f0d9bea8c569a689a59332 wrote a readme file
需要友情提示的是,你看到的一大串类似1094adb...
的是commit id
(版本号),和SVN不一样,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id
和我的肯定不一样,以你自己的为准。为什么commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线
可以使用git reset
命令回退到上一个版本
[root@a learngit]# git reset --hard HEAD^
HEAD is now at a5b274f add two GIT colum
[root@a learngit]# cat readme.txt
Git is a version control system.
Git is free software.
Git is a distrebuted version control system.
Git is free software.
重新回到最新的版本
[root@a learngit]# git reset --hard 02bf7cf77fc019aee262060a11c17b278e4c2e33
HEAD is now at 02bf7cf append GPL
[root@a learngit]# git log
commit 02bf7cf77fc019aee262060a11c17b278e4c2e33
Author: feng <abc@abc.com>
Date: Sat Jun 1 11:20:07 2019 +0800
append GPL
commit a5b274ffa6b771afcab33a74aa686695b0338263
Author: feng <abc@abc.com>
Date: Sat Jun 1 11:05:30 2019 +0800
add two GIT colum
commit f7b8f9dc3387a55fe9f0d9bea8c569a689a59332
Author: feng <abc@abc.com>
Date: Sat Jun 1 10:23:14 2019 +0800
wrote a readme file
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
:
┌────┐
│HEAD│
└────┘
│
└──> ○ append GPL
│
○ add two GIT colum
│
○ wrote a readme file
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^
回退到add two GIT colum
版本时,再想恢复到append GPL
,就必须找到append GPL
的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令:
[root@a learngit]# git reflog
a5b274f HEAD@{1}: reset: moving to HEAD^
02bf7cf HEAD@{2}: commit: append GPL
a5b274f HEAD@{3}: commit: add two GIT colum
f7b8f9d HEAD@{4}: commit (initial): wrote a readme file
终于舒了口气,从输出可知,append GPL
的commit id是1094adb
,现在,你又可以乘坐时光机回到未来了
现在版本库变成了这样,暂存区就没有任何内容了:
stage(或者叫index)的暂存区,在电脑里能看到的目录,比如我的learngit
文件夹就是一个工作区。Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD。
我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
git比较第一次和第二次修改的变化
[root@a learngit]# git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 3e8895f..2157c06 100644
--- a/readme.txt
+++ b/readme.txt
@@ -4,4 +4,4 @@ Git is a distrebuted version control system.
Git is free software.
Git is free software under the GPL
Git has a mutable index called stage.
-
+ sid
二次提交后,再比较两次修改的变化
[root@a learngit]# git add readme.txt
[root@a learngit]# git commit -m "sid"
[master 9bfb1ec] sid
1 file changed, 1 insertion(+), 1 deletion(-)
[root@a learngit]# git diff HEAD -- read.txt
[root@a learngit]#
内容待续……