zoukankan      html  css  js  c++  java
  • Git 基本使用方法

    Git有一个优点,在本地的每个项目都是一个完整的仓库,除了须要从网络拉取和推送到网络之外,其它全部的操作都能够在本地完毕。
    本文简单地介绍怎样在本地使用Git来对文件进行管理,下一篇文章再来说一下分支的管理。
    依据文件在 Git中 的状态,可将其内部分为三个工作区域:

    1)工作文件夹
         假设拿 Git 来管理项目的源码,那工作文件夹就是一个Workspace。当中的源码文件可依据其是否纳入Git的管理流程分为三类:
         1.1)Untracked:未纳入Git管理流程的
         1.2)Tracked:已纳入Git管理流程的
               对于已纳入Git管理流程的能够再分为三类:
                   a)已改动,未暂存的     (Changes not staged for commit)
                   b)已改动,已暂存的,未提交的     (Changes to be committed)
                   c)已提交,未改动的   (commited)
         1.3)不纳入Git管理流程的(在.gitignore文件里定义)

    2)暂存区域
         对于未纳入Git管理流程的文件和已纳入Git管理流程中处于 a)状态的文件,能够使用add命令来将其加入到暂存区域:
              git add a.file

         此时,a.file就会被保存到暂存区域。

    3)本地仓库
         对于已保存在暂存区域中的文件,能够使用commit命令,将其加入到本地仓库,例如以下:
              git commit -m "Commit Staged files"

    指定 -m 參数,能够后面加入对提交内容的凝视信息。
    假设不指定 -m 參数,则 Git 会跳转到一个vi输入界面,等待用户输入凝视信息之后,再提交。

    利用Git在本地分支上进行开发工作,一般的流程例如以下:
    1)先利用git status查看一下当前的工作文件夹状态:
    $ git status
    # On branch master
    nothing to commit (working directory clean)
    

    2)加入一个文件 test.txt,再查看一下其状态,例如以下:
    $ touch test.txt
    $ git status
    # On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #       test.txt
    nothing added to commit but untracked files present (use "git add" to track)
    

    可看到,在Untracked files:以下存在一个test.txt文件,而最以下一行则提示没有文件须要提交,可是存在未跟踪的文件(未跟踪,也即未纳入Git管理流程),此时 test.txt 文件就是处于未纳入管理流程的状态。
    第二种情况,改动已纳入Git管理流程的文件,再查看其状态:
    $ echo "Add content to end of the a.txt" >> a.txt
    $ 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:   a.txt
    #
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #       test.txt
    no changes added to commit (use "git add" and/or "git commit -a")
    

    能够看到,对于a.txt文件,其已纳入Git管理流程,所以其显示的是Changes not staged for commit,即上面所述的状态 a)。
    3)利用 git add 命令将其加入到暂存区域
    对于未纳入Git管理流程的文件, add 命令可将其纳入Git管理流程,同一时候将其加入到暂存区域。
    对于已纳入Git管理流程的文件,add 命令可将改动过的文件加入到暂存区域。
    切记,仅仅有加入到暂存区域的文件,才可以提交到本地仓库。
    $ git add test.txt
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       new file:   test.txt
    #
    # 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:   a.txt
    #
    

    利用add命令,将test.txt文件加入到暂存区域(Changes to be commited),可看到test.txt已经是处于暂存区域,等待提交了,其状态就是上述状态中的 b)状态了。
    相同的,利用add命令加入a.txt,例如以下:
    $ git add a.txt
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       modified:   a.txt
    #       new file:   test.txt
    #
    

    可看到,上面两个文件都被增加到暂存区域了。
    4)利用 git commit 命令,将暂存区域的文件保存到本地仓库。
    在这里要记住一点,提交(commit)做的操作是将暂存区域里面的内容保存到本地仓库。那些处于已改动,但还未加入到暂存区域的文件是不会被提交的。
    在命令行输入:
    git commit

    Git 会启动文本编辑器,让用户输入本次的提交说明,例如以下:
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       modified:   a.txt
    #       new file:   test.txt
    

    当用户输入提交信息之后,保存在暂存区的内容就会被保存到本地的仓库了。
    $ git commit
    [master d15838d] Commit the changes
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 test.txt
    

    可看到,在提交成功之后,Git会计算出一个Hash值(如上面,最前面几位是:d15838d),作为这次提交的标识值,可利用git log来查看。
    另外,能够在git commit 命令行上指定 -m 參数,后面带上提交的凝视信息,则Git会直接将-m參数指定的内容作为提交信息,直接提交到本地仓库,不再须要去编辑界面。
    $ git commit -m "Add new files"

    到这里,能够看出Git在本地某一分支上的一般流程例如以下:
    (0)工作文件夹中,创建文件。
    (1)编辑文件,利用 add 加入进暂存区域。
    (2)利用 commit 将暂存区域的文件保存到本地仓库。
    (3)编辑文件,利用 add 将其加入进暂存区域,回到(2)步,如此循环。

    对于已经纳入Git管理流程的文件,每一次改动之后,都须要利用先add(加入到暂存区域),再commit(提交到本地仓库),这是比較麻烦的,能够直接在commit命令指定 -a 參数,则能够一步运行两个操作,例如以下:
    $ git commit -am "Add and then Commit"

    可是对于未纳入Git管理流程的文件,则不能这么做,必须先显式使用add命令将其纳入Git管理流程,保存进暂存区域,再提交。

    5)利用 git rm 将文件从跟踪状态变成未跟踪状态,即不再纳入Git管理流程,例如以下:
    $ git rm b.txt
    rm 'b.txt'
    

    查看其状态:
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       deleted:    b.txt
    #
    

    相同的,这次删除操作也会被保存进暂存区域,直接提交了,才是真正从本地仓库中删除了,例如以下:
    $ git commit -m "delete b.txt"
    [master 2daa294] delete b.txt
     0 files changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 b.txt

    而此时,b.txt文件也从工作文件夹中被删除了。
    $ ls
    a.txt  c.txt  d.txt  test.txt
    

    假设仅仅是想从Git管理流程中删除此文件,而想在工作文件夹中保存此文件的话,则须要指定參数 --cached,例如以下:
    $ git rm --cached d.txt
    rm 'd.txt'
    

    查看状态可发现d.txt已经存在于Untracked files以下了:
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       deleted:    d.txt
    #
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #       d.txt
    

    提交之后,再看一下Git状态:
    $ git commit -m "remove d.txt from git"
    [master d625705] remove d.txt from git
     1 files changed, 0 insertions(+), 1 deletions(-)
     delete mode 100644 d.txt
    $ git status
    # On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #       d.txt
    nothing added to commit but untracked files present (use "git add" to track)
    

    最后,还能够使用log命令来查看多次的提交信息,例如以下:
    $ git log
    commit d62570527d545ae2677708ac2f9b015aab2df86f
    Author: linmiansheng <sheepjtgjfc@163.com>
    Date:   Tue Jun 17 14:31:10 2014 +0800
    
        remove d.txt from git
    
    commit 2daa294a500bf9b3b0af7fe586353d882f0c3592
    Author: linmiansheng <sheepjtgjfc@163.com>
    Date:   Tue Jun 17 14:27:50 2014 +0800
    
        delete b.txt
    
    commit d15838d91e2c09e5e25a0a348e4dfb27c7e6b928
    Author: linmiansheng <sheepjtgjfc@163.com>
    Date:   Tue Jun 17 14:18:28 2014 +0800
    
        Commit the changes
    
    commit b52882cca685b024991dec8b976c35a1cbc6c9cf
    Author: linmiansheng <sheepjtgjfc@163.com>
    Date:   Tue Jun 17 14:11:13 2014 +0800
    

    结束。

  • 相关阅读:
    cookie与session的区别
    基于TCP协议的网络编程
    springboot第一篇:springboot基础
    java中的正则表达式
    NIO
    io基础(字节流、字符流、转换流、缓冲字符流)
    基于UDP协议的网络编程
    es6.3学习笔记
    线程同步和线程通信
    java字符串各种编码
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4208711.html
Copyright © 2011-2022 走看看