zoukankan      html  css  js  c++  java
  • git使用

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

    内容待续……


     

  • 相关阅读:
    关于Ajax中this失效
    添加时间周期一年半年季度
    回车事件
    alt与title
    关于checked="checked"却不显示选中的“对勾”
    正则表达式的使用
    关于JQ 查找不到对象的clientHeight,
    Mysql笔记之 -- 开启Mysql慢查询
    Mysql笔记之 -- 小试MYSQL主从配置
    Linux系统学习笔记之 1 一个简单的shell程序
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/10958776.html
Copyright © 2011-2022 走看看