-
GIT(分布式版本控制系统)
1.安装git
[root@controller ~]# rpm -aq git git-1.8.3.1-12.el7_4.x86_64 //可以看到该系统上已经安装了git
如果未安装则运行以下命令即可:
yum install -y git
2.版本库创建
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
[root@controller ~]# mkdir git_db [root@controller ~]# cd git_db/
[root@controller git_db]# git init Initialized empty Git repository in /root/git_db/.git/ [root@controller git_db]# ls -a . .. .git
git init命令生成一个版本库,我们可以看到提示”Initialized empty Git repository“ 是说这是一个空的仓库,可以通过ls -a命令查看隐藏的目录。
接下来我们在当前目录(/root/git_db/)下编写一个文档,记住一定要到git init 生成版本库的目录下创建,不然git无法识别。
[root@controller git_db]# cat first_file.txt hello git 这是第一个版本
下面将一个文件放到Git仓库只需要两步。
第一步:用命令git add
告诉Git,把文件添加到仓库:
[root@controller git_db]# git add first_file.txt You have new mail in /var/spool/mail/root [root@controller git_db]#
没有输入其他内容说明添加成功。
第二步:用命令git commit
告诉Git提交说明,把文件提交到仓库:(这一步是必须的)
[root@controller git_db]# git commit -m "this is my fisrt git file" *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'root@controller.(none)') You have new mail in /var/spool/mail/root
我们可以看到提示出错无法提交,原因是没有设置名字和邮件地址Git仓库无法发送,我们需要做的是按照Run下提示的代码运行即可。
[root@controller git_db]# git config --global user.email "xxxx@qq.com" [root@controller git_db]# git config --global user.name "alai" [root@controller git_db]# git commit -m "this is my fisrt git file" [master (root-commit) a86e828] this is my fisrt git file 1 file changed, 2 insertions(+) create mode 100644 first_file.txt
再次运行commit 命令可以看到已经成功上传Git仓库。
3.代码回滚设置
修改文档
[root@controller git_db]# cat first_file.txt hello git 这是第二个版本
现在,运行git status
命令看看结果:
[root@controller git_db]# 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: first_file.txt # no changes added to commit (use "git add" and/or "git commit -a")
虽然Git告诉我们first_file.txt被修改了,但是不清楚修改了什么内容。需要用git diff
这个命令看看:
[root@controller git_db]# git diff first_file.txt diff --git a/first_file.txt b/first_file.txt index 680655c..407ee40 100644 --- a/first_file.txt +++ b/first_file.txt @@ -1,2 +1,2 @@ hello git -这是第一个版本 +这是第二个版本
输出中+号显示的就是修改或新增的内容,-号显示的就是去掉或被修改的内容
我们再次提交到Git仓库上:
[root@controller git_db]# git add . //.表示当前目录下所有改变的文档 You have new mail in /var/spool/mail/root [root@controller git_db]# git commit -m "changes" [master 25d561b] changes 1 file changed, 1 insertion(+), 1 deletion(-) [root@controller git_db]# git status # On branch master nothing to commit, working directory clean
在Git中,我们用git log
命令查看历史记录:
[root@controller git_db]# git log commit 25d561b0a53a764acf15b06a53ffab34598d455e Author: alai <1259525@qq.com> Date: Sun Feb 11 16:41:56 2018 +0800 changes commit a86e82810819202830f618440fbf4acaf3114498 Author: alai <1259525@qq.com> Date: Sun Feb 11 16:28:56 2018 +0800 this is my fisrt git file
加上--pretty=oneline
参数简化输出:
[root@controller git_db]# git log --pretty=oneline 25d561b0a53a764acf15b06a53ffab34598d455e changes a86e82810819202830f618440fbf4acaf3114498 this is my fisrt git file
第一列是commit id
(版本号),第二列是commit。
开始回滚
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。使用git reset --hard命令:
#查看当前版本为25d。。 [root@controller git_db]# git reset --hard HEAD HEAD is now at 25d561b changes You have new mail in /var/spool/mail/root [root@controller git_db]# cat first_file.txt hello git 这是第二个版本 #退回上一个版本 [root@controller git_db]# git reset --hard HEAD^ HEAD is now at a86e828 this is my fisrt git file [root@controller git_db]# cat first_file.txt hello git 这是第一个版本
这是我们又想回到最新的那个版本,你通过命令git log --pretty=oneline查看已经没有了,这时候该怎么办呢,翻日志找到该版本的commit id 命令如下:
[root@controller git_db]# git reset --hard 25d561 //commit id不必写全 git会自动查询 HEAD is now at 25d561b changes [root@controller git_db]# cat first_file.txt hello git 这是第二个版本