很久之前在 http://git.oschina.net/ 上创建了一个私有项目 modb ,目的主要是用来学习如何使用 GIT 来开源自己写的东东,中间由于种种原因停顿了很长时间,但是今天,我下定决心一定要将这个事情完成,于是乎,探索之旅又开始了……
(本文以 windows 平台上的操作进行说明)
最初创建 modb 项目时,默认会产生如下 3 个文件:
接下来只要从官网下载了最新的 Git 客户端安装使用就可以了,我安装的是最新的 Git-1.9.2-preview20140411.exe 。
首先,将 modb.git 获取到本地。
之后,通过编辑器创建文件 helloworld.txt。
通过 add 命令添加新建的文件,通过 status 命令查看此时的状态信息,通过 commit 命令在本地提交变更状态。
看上面的提示,以系统默认的用户名和密码来进行代码的管理似乎不妥。按照 oschina/git-osc 和《Git初体验》的说法,应该使用在 GIT@OSC 上注册的用户名和邮箱。
在输入命令 git commit --amend --reset-author 时,会以 VIM 编辑器的形式打开如下内容的文件。
直接执行 wq 保存后退出即可。
重新执行 status 命令查看状态,并使用 push 命令向服务器提交。
此时刷新项目网址,可以看到新的文件已经成功提交了(项目为私有,目前只有我自己能看到)。
接着测试修改文件内容的情况,在 helloworld.txt 文件中增加
之后查看状态
从输出信息中可以得知,我的修改 git 是感知的,但在我未执行 add 前,git 认为我本地代码的状态仍旧是 up-to-date with 'origin/master' 。同时 git 提示,我的修改尚未 staged for commit ,因为只有 add 后才能 commit ,所以 git 给出的结论为 no changes added to commit 。
此时查看 log 信息,可以看到仅有最初创建和刚刚添加 helloworld.txt 文件时的日志内容。
再次执行 add 和 commit 命令,并查看相关状态信息。
上述打印可以看出,我的本地代码版本已经超前 'origin/master' 分支 1 个 commit 了。此时已经没有其他需要 commit 的修改,只需要执行 push 操作将本地修改推到 GIT 服务器端。
从上述打印可以知道,只要执行过 commit 就会在 log 中体现出来。
此时不执行 push 动作,而是再次修改文件的内容,增加
之后查看状态
果然……同时出现了让我将(前面的)commit 进行 push 和将(后面的)修改 staged for commit 的建议。
这里我选择执行 add 命令,结果出现了关于行结束的警告,这个暂时跳过不处理。
执行 status 命令,发现有新的修改需要 be committed ,或者也可以使用 git reset HEAD helloworld.txt 将已经处于 staged 状态的修改回退到 unstage 状态。
这里执行 reset 操作进行回退。
可以看到,文件 helloworld.txt 已经回退到 Unstaged 状态。
重新查看 status 信息,发现状态回到了让我将 commit 进行 push 和将修改 staged for commit 的状态。
可以看出,此时本地版本已经处于领先于 origin/master 2 次 commit 的状态。
执行 push 命令将 2 次 commit 进行提交。
注:关于 “warning: LF will be replaced by CRLF” 的问题可以参考《GIT 使用时遇到的行结束符设置问题》。
(本文以 windows 平台上的操作进行说明)
最初创建 modb 项目时,默认会产生如下 3 个文件:
- .gitignore
- LICENSE
- README.md
接下来只要从官网下载了最新的 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>
|
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>
|
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>
|
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>
|
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
#
~
~
~
|
重新执行 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"
)
|
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>
|
再次执行 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>
|
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>
|
此时不执行 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>
|
这里我选择执行 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>
|
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>
|
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>
|
重新查看 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>
|
执行 push 命令将 2 次 commit 进行提交。
1
|
D:\myGIT\modb>git push origin master
|