技术改变生活

博客园 首页 新随笔 联系 订阅 管理

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,现在,你又可以乘坐时光机回到未来了

 

 

现在版本库变成了这样,暂存区就没有任何内容了:

git-stage-after-commit

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]#

 

内容待续……

 

 


 

posted on 2019-06-05 09:54  小阿峰  阅读(169)  评论(0编辑  收藏  举报