• Git 使用初体验


    http://my.oschina.net/moooofly/blog/228608

     很久之前在 http://git.oschina.net/ 上创建了一个私有项目 modb ,目的主要是用来学习如何使用 GIT 来开源自己写的东东,中间由于种种原因停顿了很长时间,但是今天,我下定决心一定要将这个事情完成,于是乎,探索之旅又开始了…… 

    (本文以 windows 平台上的操作进行说明) 

    最初创建 modb 项目时,默认会产生如下 3 个文件: 

    • .gitignore
    • LICENSE
    • README.md

    其中 .gitignore 文件的作用可以参考: 《 .gitignore 文件使用说明 》 

    接下来只要从官网下载了最新的 Git 客户端安装使用就可以了,我安装的是最新的 Git-1.9.2-preview20140411.exe 。 

    首先,将 modb.git 获取到本地。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    D:myGIT>git clone https://git.oschina.net/moooofly/modb.git
    Cloning into 'modb'...
    Username for 'https://git.oschina.net': moooofly
    Password for 'https://moooofly@git.oschina.net':
    remote: Counting objects: 5, done.
    remote: Compressing objects: 100% (4/4), done.
    remote: Total 5 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (5/5), done.
    Checking connectivity... done.
     
     
    D:myGIT>

    之后,通过编辑器创建文件 helloworld.txt。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    D:myGIT>cd modb
    D:myGITmodb>
    D:myGITmodb>dir
     驱动器 D 中的卷是 DSK1_VOL2
     卷的序列号是 121D-11F5
     
     D:myGITmodb 的目录
     
    2014-04-28  14:05    <DIR>          .
    2014-04-28  14:05    <DIR>          ..
    2014-04-28  14:05               156 .gitignore
    2014-04-28  14:05             1,094 LICENSE
    2014-04-28  14:05                 7 README.md
    2014-04-28  14:14                 0 helloworld.txt
                   4 个文件          1,257 字节
                   2 个目录  6,756,630,528 可用字节
     
    D:myGITmodb>

    通过 add 命令添加新建的文件,通过 status 命令查看此时的状态信息,通过 commit 命令在本地提交变更状态。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    D:myGITmodb>git add .
     
    D:myGITmodb>
    D:myGITmodb>git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
     
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
     
            new file:   helloworld.txt
     
     
    D:myGITmodb>
    D:myGITmodb>git commit -m "add helloworld.txt"
    [master 8576fc3] add helloworld.txt
     Committer: unknown <sunfei@sunfei.kdcrd.com>
    Your name and email address were configured automatically based
    on your username and hostname. Please check that they are accurate.
    You can suppress this message by setting them explicitly:
     
        git config --global user.name "Your Name"
        git config --global user.email you@example.com
     
    After doing this, you may fix the identity used for this commit with:
     
        git commit --amend --reset-author
     
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 helloworld.txt
     
    D:myGITmodb>

          看上面的提示,以系统默认的用户名和密码来进行代码的管理似乎不妥。按照 oschina/git-osc 和《Git初体验》的说法,应该使用在 GIT@OSC 上注册的用户名和邮箱。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    D:myGITmodb>
    D:myGITmodb>git config --global user.name "moooofly"
     
    D:myGITmodb>git config --global user.email "centos.sf@gmail.com"
     
    D:myGITmodb>
    D:myGITmodb>git commit --amend --reset-author
    [master 12699ba] add helloworld.txt
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 helloworld.txt
     
    D:myGITmodb>

    在输入命令 git commit --amend --reset-author 时,会以 VIM 编辑器的形式打开如下内容的文件。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    add helloworld.txt
     
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    # Your branch is ahead of 'origin/master' by 1 commit.
    #   (use "git push" to publish your local commits)
    #
    # Changes to be committed:
    #       new file:   helloworld.txt
    #
    ~
    ~
    ~

    直接执行 wq 保存后退出即可。
    重新执行 status 命令查看状态,并使用 push 命令向服务器提交。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    D:myGITmodb>
    D:myGITmodb>git status
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
     
    nothing to commit, working directory clean
     
    D:myGITmodb>git push origin master
    Username for 'https://git.oschina.net': moooofly
    Password for 'https://moooofly@git.oschina.net':
    Counting objects: 4, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 276 bytes | 0 bytes/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    To https://git.oschina.net/moooofly/modb.git
       8fb8c63..136a5da  master -> master
     
    D:myGITmodb>

    此时刷新项目网址,可以看到新的文件已经成功提交了(项目为私有,目前只有我自己能看到)。 

    接着测试修改文件内容的情况,在 helloworld.txt 文件中增加 

    1
    hello world! haha!

    之后查看状态 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    D:myGITmodb>git status
    On branch master
    Your branch is up-to-date with 'origin/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:   helloworld.txt
     
    no changes added to commit (use "git add" and/or "git commit -a")

          从输出信息中可以得知,我的修改 git 是感知的,但在我未执行 add 前,git 认为我本地代码的状态仍旧是 up-to-date with 'origin/master' 。同时 git 提示,我的修改尚未 staged for commit ,因为只有 add 后才能 commit ,所以 git 给出的结论为 no changes added to commit 。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    D:myGITmodb>
    D:myGITmodb>git log
    commit 136a5da602fbba228c51cb7f680f1784bea1e6af
    Author: moooofly <centos.sf@gmail.com>
    Date:   Mon Apr 28 15:11:53 2014 +0800
     
        add helloworld.txt
     
    commit 8fb8c6358323d3213b244355fa0e9df0e28a3b0d
    Author: 摩云飞 <centos.sf@gmail.com>
    Date:   Thu Jan 2 18:23:10 2014 +0800
     
        Initial commit
     
    D:myGITmodb>

    此时查看 log 信息,可以看到仅有最初创建和刚刚添加 helloworld.txt 文件时的日志内容。 

    再次执行 add 和 commit 命令,并查看相关状态信息。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    D:myGITmodb>
    D:myGITmodb>git add .
     
    D:myGITmodb>git commit -m "add string in helloworld.txt"
    [master 1c01bff] add string in helloworld.txt
     1 file changed, 1 insertion(+)
     
    D:myGITmodb>
    D:myGITmodb>git status
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
     
    nothing to commit, working directory clean
     
    D:myGITmodb>

          上述打印可以看出,我的本地代码版本已经超前 'origin/master' 分支 1 个 commit 了。此时已经没有其他需要 commit 的修改,只需要执行 push 操作将本地修改推到 GIT 服务器端。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    D:myGITmodb>git log
    commit 1c01bff84483507b428eecd4fff7bbe89467dcce
    Author: moooofly <centos.sf@gmail.com>
    Date:   Mon Apr 28 16:38:16 2014 +0800
     
        add string in helloworld.txt
     
    commit 136a5da602fbba228c51cb7f680f1784bea1e6af
    Author: moooofly <centos.sf@gmail.com>
    Date:   Mon Apr 28 15:11:53 2014 +0800
     
        add helloworld.txt
     
    commit 8fb8c6358323d3213b244355fa0e9df0e28a3b0d
    Author: 摩云飞 <centos.sf@gmail.com>
    Date:   Thu Jan 2 18:23:10 2014 +0800
     
        Initial commit
     
    D:myGITmodb>

    从上述打印可以知道,只要执行过 commit 就会在 log 中体现出来。 

    此时不执行 push 动作,而是再次修改文件的内容,增加 

    1
    hello moooofly! haha!

    之后查看状态 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    D:myGITmodb>git status
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
     
    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:   helloworld.txt
     
    no changes added to commit (use "git add" and/or "git commit -a")
     
    D:myGITmodb>

    果然……同时出现了让我将(前面的)commit 进行 push 和将(后面的)修改 staged for commit 的建议。 

    这里我选择执行 add 命令,结果出现了关于行结束的警告,这个暂时跳过不处理。 

    1
    2
    3
    4
    5
    D:myGITmodb>git add .
    warning: LF will be replaced by CRLF in helloworld.txt.
    The file will have its original line endings in your working directory.
     
    D:myGITmodb>

          执行 status 命令,发现有新的修改需要 be committed ,或者也可以使用 git reset HEAD helloworld.txt 将已经处于 staged 状态的修改回退到 unstage 状态。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    D:myGITmodb>git status
    warning: LF will be replaced by CRLF in helloworld.txt.
    The file will have its original line endings in your working directory.
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
     
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
     
            modified:   helloworld.txt
     
     
    D:myGITmodb>

    这里执行 reset 操作进行回退。 

    1
    2
    3
    4
    5
    6
    7
    D:myGITmodb>git reset HEAD helloworld.txt
    warning: LF will be replaced by CRLF in helloworld.txt.
    The file will have its original line endings in your working directory.
    Unstaged changes after reset:
    M       helloworld.txt
     
    D:myGITmodb>

    可以看到,文件 helloworld.txt 已经回退到 Unstaged 状态。 

    重新查看 status 信息,发现状态回到了让我将 commit 进行 push 和将修改 staged for commit 的状态。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    D:myGITmodb>git status
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
     
    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:   helloworld.txt
     
    no changes added to commit (use "git add" and/or "git commit -a")
     
    D:myGITmodb>
     
    D:myGITmodb>git add .
    warning: LF will be replaced by CRLF in helloworld.txt.
    The file will have its original line endings in your working directory.
     
    D:myGITmodb>
    D:myGITmodb>git commit -m "add string 2 in helloworld.txt"
    [master warning: LF will be replaced by CRLF in helloworld.txt.
    The file will have its original line endings in your working directory.
    793216b] add string 2 in helloworld.txt
    warning: LF will be replaced by CRLF in helloworld.txt.
    The file will have its original line endings in your working directory.
     1 file changed, 2 insertions(+), 1 deletion(-)
     
    D:myGITmodb>
    D:myGITmodb>git status
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
     
    nothing to commit, working directory clean
     
    D:myGITmodb>

    可以看出,此时本地版本已经处于领先于 origin/master 2 次 commit 的状态。 

    执行 push 命令将 2 次 commit 进行提交。 

    1
    D:myGITmodb>git push origin master

    注:关于 “warning: LF will be replaced by CRLF” 的问题可以参考《GIT 使用时遇到的行结束符设置问题》。 

  • 相关阅读:
    破衣服的回忆
    underscorejs 源码走读笔记
    关于书籍《区块链以太坊DApp开发实战》的内容告示
    从区块链技术研发者的角度,说说我的区块链从业经历和对它的理解
    简介 以太坊 2.0 核心 之 共识机制的改变
    一般电商应用的订单队列架构思想
    详细讲解:零知识证明 之 ZCash 完整的匿名交易流程
    HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
    由 System.arraycopy 引发的巩固:对象引用 与 对象 的区别
    如何独立开发一个网络请求框架
  • 原文地址:https://www.cnblogs.com/XACOOL/p/5256522.html
Copyright © 2020-2023  润新知