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:\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 使用初体验的更多相关文章
- Git学习笔记(windows git之初体验)
阿里国内镜像地址: https://npm.taobao.org/mirrors/git-for-windows/ 最近在学习廖雪峰老师关于git的教程,链接可以在我的首页找到.首先使用国内镜像下载并 ...
- git初体验(三)git分支
分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...
- protobuf初体验
概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...
- node.js 初体验
node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...
- grunt 构建工具(build tool)初体验
操作环境:win8 系统,建议使用 git bash (window下的命令行工具) 1,安装node.js 官网下载:https://nodejs.org/ 直接点击install ,会根据你的操 ...
- iOS7初体验(1)——第一个应用程序HelloWorld
iOS7 Beta已经发布了,迫不及待地下载了iOS 7及Xcode 5并体验了一下.先做一个简单的Hello World看看都有哪些变化吧. 1. 启动Xcode5-DP: 2. 从菜单选择File ...
- spring cloud 初体验
spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有 ...
- Hexo初体验
title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...
- django初体验 学习笔记
django环境搭建 1.安装Python 2.ipython sudo apt-get install ipython sudo pip instal ...
随机推荐
- 杭电1002 Etaoin Shrdlu
Problem Description The relative frequency of characters in natural language texts is very important ...
- asp脱离源代码管理
当项目中出现“未能找到与此解决方案关联的源代码管理提供程序.项目将视为不受源代码管理” 解决方法:1.vs2013打开项目, 2.提示“您正在打开的解决方案已绑定到以下Team Foundation ...
- 十一章:用CSS进行布局
本章重点:盒模型与元素浮动. 盒模型: 1.CSS处理网页时,它认为每个元素都包含在一个不可见的盒子里.这就是众所周知的盒模型,这里的盒子由内容区域.内容区域周围的空间.内边距和外边缘和边框外面将元素 ...
- hdu_1848_Fibonacci again and again(博弈sg函数)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:给你3堆石子,每次只能取fibonacci数的石子,问先手是否能赢 题解:SG函数模版题 ...
- IoC容器Autofac正篇之简单实例(四)
先上一段代码. namespace ConsoleApplication3 { class Program { static void Main(string[] args) { ContainerB ...
- chrome 常用快捷操作
Chrome窗口和标签页快捷键: Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件,在谷歌浏览器中打开计算机上的文件 ...
- ios控件 UIControl
< UIControl> 1 处理用户事件的控件的基类,如UIButton,UISlider等 2 一般不直接实例化,而是使用他的子类 3 可以通过跟踪触摸事件来设置和获取控件状态,并且这 ...
- 查询MySQL中某个数据库中有多少张表
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = '数据库' GRO ...
- Apache 与tomcat区别
Apache与Tomcat有什么关系和区别 经常在用apache和tomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系,在用tomcat的时候总出现apache,总感到迷惑,到底谁是主谁是 ...
- Vim常用命令【转载】
下面基本是vim的基本用法,刚开始学习可能有些不习惯.但贵在坚持,即使不习惯,也要坚持使用,做到不经过思考就能操作,你会发现真的很方便.很多操作可以通过不同的命令达到,我这里只列出常用的. 基础命令 ...