• Git 学习札记(二)安装git以及基本操作


    Git 学习札记(二)

    Linux上的Git基本操作

    安装和使用 Git

    在linux安装git的命令:

    sudo apt-get install git

    结果如图:(为了截这个图特意卸载了又装了一遍 /手动捂脸)


    这里写图片描述

    好了已经安装上了,然后我们先创建一个目录,然后把它做成一个git仓库:

    sudo mkdir mygit
    cd mygit
    sudo git init

    结果如下:

    chia@edogawachia-sphinx:~/mygit$ sudo git init
    [sudo] chia 的密码: 
    初始化空的 Git 仓库于 /home/chia/mygit/.git/

    很好,说明已经初始化的新的Git仓库,可以看到这个 ” .git ” 目录。

    chia@edogawachia-sphinx:~/mygit$ ls -ah
    .  ..  .git

    是隐藏的,因此要用 -a 把它显示出来。

    下面写一个简单的readme.txt文件,然后将它添加到Git仓库,操作如下:

    其中readme中的内容为:

    this is a readme file
    created by E.Chia 2018/02/06

    git status 查看当前git状态,git add 将文件推进暂存区域,git commit 用来提交到仓库。

    chia@edogawachia-sphinx:~/mygit$ sudo su
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    
    初始提交
    
    未跟踪的文件:
      (使用 "git add <文件>..." 以包含要提交的内容)
    
        readme.txt
    
    提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
    root@edogawachia-sphinx:/home/chia/mygit# git add readme.txt 
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    
    初始提交
    
    要提交的变更:
      (使用 "git rm --cached <文件>..." 以取消暂存)
    
        新文件:   readme.txt
    
    root@edogawachia-sphinx:/home/chia/mygit# git commit -m "readme 1.0 version"
    
    *** 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@edogawachia-sphinx.(none)')
    root@edogawachia-sphinx:/home/chia/mygit# 
    

    结果出现了问题。是没有进行设置。按照提示设置再提交,如下:

    root@edogawachia-sphinx:/home/chia/mygit# git config --global user.email "jzsherlock@163.com"
    root@edogawachia-sphinx:/home/chia/mygit# git config --global user.name "E.Chia" 
    root@edogawachia-sphinx:/home/chia/mygit# git commit -m "readme 1.0 version"
    [master (根提交) 1e3633e] readme 1.0 version
     1 file changed, 3 insertions(+)
     create mode 100644 readme.txt
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    无文件要提交,干净的工作区

    这个无文件要提交,说明已经从暂存区提交到了仓库,因此没有新的需要提交的文件。干净的工作区表示没有工作区新的更改。假如改动一下工作区:

    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        修改:     readme.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

    就会提示已经修改,但是还没有add进暂存区域。

    root@edogawachia-sphinx:/home/chia/mygit# git diff "readme.txt"
    diff --git a/readme.txt b/readme.txt
    index 148f75a..d995350 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,3 +1,3 @@
     This is a readme file
     created by E.Chia 2018/02/06
     -
     +modified by E.Chia 1st time

    用 git diff 可以查看修改前后的不同,然后提交上去:

    root@edogawachia-sphinx:/home/chia/mygit# git add "readme.txt"
    root@edogawachia-sphinx:/home/chia/mygit# git commit -m 'added some sentence'
    [master 7b2ff8d] added some sentence
     1 file changed, 1 insertion(+), 1 deletion(-)

    用 git log 可以看历史记录:

    root@edogawachia-sphinx:/home/chia/mygit# git log
    commit 7b2ff8d11bcf98a1ed551f1ab1265d78307492cc
    Author: E.Chia <jzsherlock@163.com>
    Date:   Tue Feb 6 23:50:03 2018 +0800
    
        added some sentence
    
    commit 1e3633e565e6fd7d30991a47f98a118aca2946bc
    Author: E.Chia <jzsherlock@163.com>
    Date:   Tue Feb 6 23:43:34 2018 +0800
    
        readme 1.0 version
    root@edogawachia-sphinx:/home/chia/mygit# git log --pretty=oneline
    7b2ff8d11bcf98a1ed551f1ab1265d78307492cc added some sentence
    1e3633e565e6fd7d30991a47f98a118aca2946bc readme 1.0 version

    可以看到修改的历史,并且展示了commit id都是哈希值。

    语句的基本原理


    这里写图片描述
    这里写图片描述

    上面这个图示表示了在进行以上操作的时候实际发生的事情。Index就是暂存区域的内容,HEAD是指向当前版本的Git仓库的指针。进行一次git add,相当于把working directory里面的内容推进了stage中的index,然后git commit 将index中的即将被提交的内容提交到branch,然后HEAD指向最新的版本。

    当我们新建一个git仓库时,用了 git init,实际就是建立了一个带着HEAD节点的Git仓库,其中这时HEAD节点指向nothing。

    其他操作

    如果需要回退到之前的版本,可以用 git reset:

    git reset 有以下几种用法,分别对应不同的参数,分别是 –soft,–mixed,–hard。soft是指只移动HEAD指针到某个版本;mixed指的是先移动HEAD指针,然后改变Index,也就是暂存区域的内容;hard是将HEAD和Index改完过后,把工作目录也改了。图示如下:


    这里写图片描述
    这里写图片描述
    这里写图片描述

    可以看出,三个过程是连贯的,如果指定soft,就只做到第一步骤,指定mixed或者不指定,也就是默认mixed,那就做到第二步骤,如果指定hard,则三个步骤完全。

    测试:

    先做三个版本,结果如下:

    root@edogawachia-sphinx:/home/chia/mygit# vim readme.txt 
    root@edogawachia-sphinx:/home/chia/mygit# git add
    没有指定文件,也没有文件被添加。
    也许您想要执行 'git add .'?
    root@edogawachia-sphinx:/home/chia/mygit# git add 'readme.txt'
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
        修改:     readme.txt
    
    root@edogawachia-sphinx:/home/chia/mygit# git commit -m 'another modification'
    [master 440fc53] another modification
     1 file changed, 1 insertion(+)
    root@edogawachia-sphinx:/home/chia/mygit# git log
    commit 440fc536423d55513b47e85df97a40440bc8f04d
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:16:24 2018 +0800
    
        another modification
    
    commit 1d5928d4a36a32c6fa17f60943848e378cc47774
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:15:13 2018 +0800
    
        revision
    
    commit 1e3633e565e6fd7d30991a47f98a118aca2946bc
    Author: E.Chia <jzsherlock@163.com>
    Date:   Tue Feb 6 23:43:34 2018 +0800
    
        readme 1.0 version

    可以看到三次commit的id和信息。

    然后我们用reset还原到之前的版本:

    root@edogawachia-sphinx:/home/chia/mygit# git reset --soft HEAD~
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    要提交的变更:
      (使用 "git reset HEAD <文件>..." 以取消暂存)
    
        修改:     readme.txt
    
    root@edogawachia-sphinx:/home/chia/mygit# git log
    commit 1d5928d4a36a32c6fa17f60943848e378cc47774
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:15:13 2018 +0800
    
        revision
    
    commit 1e3633e565e6fd7d30991a47f98a118aca2946bc
    Author: E.Chia <jzsherlock@163.com>
    Date:   Tue Feb 6 23:43:34 2018 +0800
    
        readme 1.0 version

    说明soft使得HEAD所指的和暂存区域的Index的内容不一样了。而且log里面少了最新的版本。我们先还原到最新版本,然后实验hard。

    root@edogawachia-sphinx:/home/chia/mygit# git reset 440fc
    root@edogawachia-sphinx:/home/chia/mygit# git log
    commit 440fc536423d55513b47e85df97a40440bc8f04d
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:16:24 2018 +0800
    
        another modification
    
    commit 1d5928d4a36a32c6fa17f60943848e378cc47774
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:15:13 2018 +0800
    
        revision
    
    commit 1e3633e565e6fd7d30991a47f98a118aca2946bc
    Author: E.Chia <jzsherlock@163.com>
    Date:   Tue Feb 6 23:43:34 2018 +0800
    
        readme 1.0 version
    root@edogawachia-sphinx:/home/chia/mygit# git reset --hard HEAD~
    HEAD 现在位于 1d5928d revision
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    无文件要提交,干净的工作区

    hard之后三个区域都一样了,因此无文件提交,而且工作区干净。

    root@edogawachia-sphinx:/home/chia/mygit# git log
    commit 3d8d645e009decc8563085da87761294ced234e9
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:24:27 2018 +0800
    
        another revision
    
    commit 440fc536423d55513b47e85df97a40440bc8f04d
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:16:24 2018 +0800
    
        another modification
    
    commit 1d5928d4a36a32c6fa17f60943848e378cc47774
    Author: E.Chia <jzsherlock@163.com>
    Date:   Wed Feb 7 15:15:13 2018 +0800
    
        revision
    
    commit 1e3633e565e6fd7d30991a47f98a118aca2946bc
    Author: E.Chia <jzsherlock@163.com>
    Date:   Tue Feb 6 23:43:34 2018 +0800
    
        readme 1.0 version
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    无文件要提交,干净的工作区
    root@edogawachia-sphinx:/home/chia/mygit# git reset --mixed HEAD~
    重置后取消暂存的变更:
    M   readme.txt
    root@edogawachia-sphinx:/home/chia/mygit# git status
    位于分支 master
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
        修改:     readme.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

    可以看出,hard之后的status是无文件提交工作区干净,说明三个区域保持一致;mixed之后是尚未暂存以备提交,说明暂存区和工作区不一样,soft之后status是要提交的变更,说明Git仓库和暂存区不一样。

    HEAD~指的是HEAD的parent,就是上一个版本,HEAD~~是上两个,HEAD~10相当于HEAD后面有10个小波浪线。

    git reset 版本号前几位

    直接退到某个commit id的版本。

    root@edogawachia-sphinx:/home/chia/mygit# git reflog
    06034ac HEAD@{0}: commit: last version
    440fc53 HEAD@{1}: reset: moving to HEAD~
    3d8d645 HEAD@{2}: commit: another revision
    440fc53 HEAD@{3}: reset: moving to 440fc
    1d5928d HEAD@{4}: reset: moving to HEAD~
    440fc53 HEAD@{5}: reset: moving to 440fc
    1d5928d HEAD@{6}: reset: moving to HEAD~
    440fc53 HEAD@{7}: commit: another modification
    1d5928d HEAD@{8}: commit: revision
    1e3633e HEAD@{9}: reset: moving to HEAD~
    7b2ff8d HEAD@{10}: commit: added some sentence
    1e3633e HEAD@{11}: commit (initial): readme 1.0 version

    git reflog可以看每一次命令。

    reference

    https://git-scm.com/blog

    https://git-scm.com/book/zh/v2

    https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

    2018/02/07 星期三 明天回家 15:45

    生命只是一连串孤立的片刻。—— 马塞尔·普鲁斯特

  • 相关阅读:
    兴趣标签体系告诉我,闲鱼的95后是这样的...
    重磅报告 | 《中国企业2020:人工智能应用实践与趋势》
    this指针和类的继承 C++快速入门16
    构造器和析构器 C++快速入门15
    构造器和析构器 C++快速入门15
    鱼油账号记录程序(续) 零基础入门学习Delphi39
    鱼C扫描器 零基础入门学习Delphi40
    鱼油账号记录程序(续) 零基础入门学习Delphi39
    PEInfo编程思路讲解02 工具篇02|解密系列
    PEInfo编程思路讲解02 工具篇02|解密系列
  • 原文地址:https://www.cnblogs.com/morikokyuro/p/13256820.html
Copyright © 2020-2023  润新知