zoukankan      html  css  js  c++  java
  • [原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset

    在window下已经安装了git的环境

    1.建立本地仓库

     mkdir   test     #建立test目录

      cd   test        #进入目录

     git  init           #创建好了本地git仓库,会发现在test目录中多了一个.git目录,并且这个目录是隐藏的

    示例:

    $ git init
    Initialized empty Git repository in F:/git-repo/test/.git/

    init前

    init后

    2.提交文件到中转站和仓库(add和commit)

    使用Notepad++创建一个文本文件readme.txt

    (记得把Notepad++的默认编码设置为UTF-8 without BOM)不能使用记事本等其他工具创建

    readme.txt文件位于test目录中

    readme.txt文件内容为:

    Git is a version control system.
    Git is free software.
    [提交到中转站]在路径为test目录中执行命令           
    $ git add readme.txt                #告诉git 将readme.txt文件添加到仓库等等提交(也可以认为添加到了仓库中转站)没有任何输出表示正确添加到中转站
    [提交到仓库]在路径为test目录中执行命令
    $ git commit -m "wrote a readme file"                #告诉git  将刚才放置在中转站的提交到仓库 并给这个提交动作附上一个标签
    [master (root-commit) 51af5b3] wrote a readme file
     1 file changed, 2 insertions(+)
     create mode 100644 readme.txt

    注意:注意:注意:

    为什么提交要用add和commit   因为可以add多个文件到中转站,一次commit就可以将中转站中的文件提交到仓库。

    比如:

    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."

     ------------------------------------------------------add时遇到的warning-----------------------------------------

    $ git add file1.txt
    warning: LF will be replaced by CRLF in test.txt.
    The file will have its original line endings in your working directory.

    ------------------------------------------------------需要了解的概念-----------------------------------------

    LF是linux下的换行符,而CRLF是enter + 换行

    当创建文档的时候使用的环境是windows,而git运行环境在linux环境

    -------------------------------------------------------解决这个warning--------------------------------------

    git config --global core.autocrlf false


    ----------------------------------------------------------end--------------------------------------------------

    3.git status和git diff
    一般步骤为,检查init的git仓库的文件是否有修改 git status
    如果有修改就查看修改的地方是不是正确的 git diff
    如果修改正确的就提交的中转站 git add <file>
    不清楚是否正确提交到中转站 git status
    如果正确就再提交到仓库确保代码正常 git commit <file> -m "string"
    $ git status                                #查看init仓库所有文件的状态,即查看当前文件test目录中的所有文件的状态(未修改/修改/更新)包括中转站中的文件状态
    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 diff readme.txt                       #查看被修改的文件,修改了哪些东西
    diff --git a/readme.txt b/readme.txt        #比较修改前和修改后的文件
    index d8036c1..53d4271 100644
    --- a/readme.txt                            
    +++ b/readme.txt                             #在readme.txt中做了增加操作
    @@ -1,2 +1,2 @@
    -Git is a version control system.
    -Git is free software.
     No newline at end of file
    +Git is a distributed  version control system.
    +Git is free software.
    $ git add readme.txt                       #检查修改无误后提交到中转站
    $ git status                               #确认各个文件的状态和中转站里的文件
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   readme.txt
    $ git commit readme.txt -m "add distributed "      #将中转站里的文件提交到.git仓库
    [master 9682929] add distributed
     1 file changed, 2 insertions(+), 2 deletions(-)

     最后,相当于所有的修改都已经提交到了git仓库里面

    $ git status                           #查看整个Test目录的结果
    On branch master
    nothing to commit, working directory clean     #已经clean了

    4.git的快照commit

    从之前的改动到现在已经提交了三个版本的readme.txt到.git仓库

    版本1:wrote a readme file
    
    Git is a version control system.
    Git is free software.
    
    版本2:add distributed
    
    Git is a distributed version control system.
    Git is free software.
    
    版本3:append GPL
    
    Git is a distributed version control system.
    Git is free software distributed under the GPL.

    查看git的快照commit,需要使用git log:

    类似每次快照都要产生log文件,需要用git log来查看快照,git log是按照最新到最旧来显示。

    如下:

    ################################
      【需要了解的概念】:Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),
      上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
    ################################


    $ git log commit f78cd0925b2bc2883d7ed4de49b1a851367ae56d #这一串数字代表快照的id号,由SHA1产生 Author: userlhb
    <lhb@lhb.com>                 Date: Sat Mar 26 20:23:52 2016 +0800 #最新的commit快照 也叫做HEAD快照 append GPL commit 96829291d720b3b84d0ab2a5aad89b0af97a1394 Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 16:20:13 2016 +0800 add distributed #这是HEAD快照的前一个快照 用HEAD^表示 commit 51af5b36b85c52e86b6140d3a73b5e22cd3f78da Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 15:36:57 2016 +0800 #最旧的commit快照 wrote a readme file #这是HEAD快照的前前一个快照 用HEAD^^表示,问题来了?如果前前一百个,怎么表示? HEAD~100

    或者显示为一行,添加--pretty=oneline

    $ git log --pretty=oneline
    f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL
    96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
    51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file

    5.git中实现版本回退使用git reset

       先看下面两幅图两分钟:

    --------------------------------------------------------------------------------------------

        

    图一                                       表示当前在append GPL这个版本上

    -----------------------------------------------------------------------------------------------------

    图二 表示当前在wrote a readme file这个版本上。

      [看图说明]

      git reset 可以控制指针 HEAD 在不同的快照直接切换,如果需要切换到上一个快照用git reset --hard HEAD^

      git reset 和 git commit <file> -m "string" 的动作会被记录到git reflog中,使用git reflog可以查看记录

      git log 查看所有提交到版本库中的快照(版本)

      

    ---------------------------------------------------------------------------------------------------

    [实践出真知]

    看图一,理解回退。
    回退到中间那个版本add disributed
    $ git log --pretty=oneline                                         #列出.git仓库中的所有版本号
    f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL
    96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
    51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
    
    
    $ git reset --hard HEAD^                                                  #回退到前一个版本add distributed
    Unstaged changes after reset:
    M       readme.txt
    
    
    $ git log --pretty=oneline                                         #查看是否回退到add distributed,不能查看之前的版本。
    96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
    51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file

    有没有发现什么?对,回退到add distributed后,不能查看之前的版本。要是又要回退到最开始那个版本怎么办呢?

    看图二,理解回退到仓库中最新的那个版本:因为 git reflog 能记录 git reset和git commit <file> -m "string"的动作,所以可以

    使用git reflog来查看每个动作的id号,然后通过id号回退到最新的那个版本append GPL

    [实践出真知]

    $ git reflog                                         #罗列出所有的HEAD动作
    9682929 HEAD@{0}: reset: moving to HEAD^
    f78cd09 HEAD@{1}: commit: append GPL                 #append GPL 的id是 f78cd09
    9682929 HEAD@{2}: commit: add distributed
    51af5b3 HEAD@{3}: commit (initial): wrote a readme file


    $ git reset --hard f78cd09 #移动HEAD指针到 f78cd09 append GPL $ git log --pretty=oneline #查看是否切换到append GPL 这个版本 f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file

     接下一篇:git的使用(二)

    参考git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

     





  • 相关阅读:
    简单介绍ps切片工具切图技巧
    ps选区工具应用
    【Photoshop基本概念知识】
    jQuery上传插件Uploadify使用详解
    PS非主流头发效果
    C#正则表达式整理备忘
    C#中利用正则表达式实现字符串搜索
    PS快捷键大全
    PS操作速查
    Photoshop CS2 菜单入门介绍
  • 原文地址:https://www.cnblogs.com/horizonli/p/5323363.html
Copyright © 2011-2022 走看看