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:\myGIT\modb>
D:\myGIT\modb>dir
 驱动器 D 中的卷是 DSK1_VOL2
 卷的序列号是 121D-11F5
 
 D:\myGIT\modb 的目录
 
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:\myGIT\modb>

通过 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:\myGIT\modb>git add .
 
D:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>

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

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

在输入命令 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:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>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:\myGIT\modb>

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

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

1
hello world! haha!

之后查看状态

1
2
3
4
5
6
7
8
9
10
11
D:\myGIT\modb>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:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
D:\myGIT\modb>
D:\myGIT\modb>git add .
 
D:\myGIT\modb>git commit -m "add string in helloworld.txt"
[master 1c01bff] add string in helloworld.txt
 1 file changed, 1 insertion(+)
 
D:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>

上述打印可以看出,我的本地代码版本已经超前 '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:\myGIT\modb>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:\myGIT\modb>

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

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

1
hello moooofly! haha!

之后查看状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
D:\myGIT\modb>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:\myGIT\modb>

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

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

1
2
3
4
5
D:\myGIT\modb>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:\myGIT\modb>

执行 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:\myGIT\modb>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:\myGIT\modb>

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

1
2
3
4
5
6
7
D:\myGIT\modb>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:\myGIT\modb>

可以看到,文件 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:\myGIT\modb>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:\myGIT\modb>
 
D:\myGIT\modb>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:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>
D:\myGIT\modb>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:\myGIT\modb>

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

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

1
D:\myGIT\modb>git push origin master

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

Git 使用初体验的更多相关文章

  1. Git学习笔记(windows git之初体验)

    阿里国内镜像地址: https://npm.taobao.org/mirrors/git-for-windows/ 最近在学习廖雪峰老师关于git的教程,链接可以在我的首页找到.首先使用国内镜像下载并 ...

  2. git初体验(三)git分支

    分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...

  3. protobuf初体验

    概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...

  4. node.js 初体验

    node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...

  5. grunt 构建工具(build tool)初体验

    操作环境:win8 系统,建议使用 git bash (window下的命令行工具) 1,安装node.js 官网下载:https://nodejs.org/  直接点击install ,会根据你的操 ...

  6. iOS7初体验(1)——第一个应用程序HelloWorld

    iOS7 Beta已经发布了,迫不及待地下载了iOS 7及Xcode 5并体验了一下.先做一个简单的Hello World看看都有哪些变化吧. 1. 启动Xcode5-DP: 2. 从菜单选择File ...

  7. spring cloud 初体验

    spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有 ...

  8. Hexo初体验

    title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...

  9. django初体验 学习笔记

    django环境搭建     1.安装Python     2.ipython         sudo apt-get install ipython         sudo pip instal ...

随机推荐

  1. 微信web开发工具

    http://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html#.E4.B8.8B.E8.BD.BD.E5.9C.B0.E5 ...

  2. 1001. A+B Format

    Calculate a + b and output the sum in standard format -- that is, the digits must be separated into ...

  3. 自定义控件之--继承控件(圆形TextView)

    师从郭大,自学于心,继承控件无疑就是继承自现有控件,保持继承的控件的属性并进行必要的扩展.   比如下面这个自定义控件,它就保持了TextView的属性,并对TextView的外观进行必要的修改该来适 ...

  4. CentOS挂载硬盘

    1.查看当前硬盘使用状况: [root@gluster_node1 ~]# df -h 文件系统     容量 已用 可用 已用%% 挂载点 /dev/sda3 14G 2.4G 11G 19% / ...

  5. linux top 命令---VIRT,RES,SHR,虚拟内存和物理内存(

    VIRT,RES,SHR,虚拟内存和物理内存(转) VIRT: 1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据,以及malloc.new分配的堆空间和分配的栈空间等: ...

  6. Linux入门学习教程:虚拟机体验之KVM篇

    本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2.       dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...

  7. Qt Quick里的图形效果:阴影(Drop Shadow)

    Qt Quick提供了两种阴影效果: DropShow,阴影.这个元素会根据源图像,产生一个彩色的.模糊的新图像,把这个新图像放在源图像后面,给人一种源图像从背景上凸出来的效果. InnerShado ...

  8. laravel路由使用【总结】

    1.路由参数 必选参数 有时我们需要在路由中捕获 URI 片段.比如,要从 URL 中捕获用户 ID,需要通过如下方式定义路由参数: Route::get('/test_param/{id}', 'T ...

  9. rm: 无法删除 "xxxxx.o" : 输入/输出错误.

    rm: 无法删除 "xxxxx.o" : 输入/输出错误. 碰到无法删除的文件,以为完蛋了,要重装. 后面重启一下就可以了

  10. RS485 介绍

    一.RS485总线介绍: RS485总线是一种常见的串行总线标准,采用平衡发送与差分接收的方式,因此具有抑制共模干扰的能力.在一些要求通信距离为几十米到上千米的时候,RS485总线是一种应用最为广泛的 ...