git 历险记(一)
来源:互联网 发布:匈牙利算法最大匹配 编辑:程序博客网 时间:2024/05/16 18:42
http://www.infoq.com/cn/news/2011/01/git-adventures-1 截取原文 (真的好详细啊,显示结果跟他的一模一样,感谢~)
我们首先打开Git的命令行:windows下是点击“Git Bash 快捷方式”;Linux或是Unix like平台的话就直接打开命令行界面就可以了。
备注:$符号后面的字符串代表的是命令行输入;命令行输入后的以#开始的黑体字符串代表注释;其它的部分则是命令行输出。
我们先用建一个仓库吧:
<strong>$mkdir testGit #建立仓库目录$cd testGit #进入仓库目录$git init #这会在当前的目录下建一个仓库</strong>Initialized empty Git repository in e:/doc/Git/test/testGit/.git/
好的,前面的三行命令就建立了一个本地的Git仓库。这个仓库现在是一个空的仓库。
我们在命令行下执行:
<strong>$ git status #查看当前仓库的状态</strong># On branch master (在master分支上)## Initial commit#nothing to commit (create/copy files and use "git add" to track)(现在没有任何被提交的文件,复制或创建新的文件,再用”git add” 命令添加到暂存区中)<strong>$ git log #查看当前仓库的历史日志</strong>fatal: bad default revision 'HEAD'(由于仓库里没有任提交在里面,所以它会报这个错。BTW: 这种提示是不是有点不友好呀:) )
现在就让我们在这个仓库里添加点内容吧。
<strong>$ echo “hello Git” > readme.txt #建立一个含有 hello Git 的文本文件$ git add readme.txt #将readme.txt添加到暂存区中</strong>$ git status #查看当前仓库的状态# On branch master## Initial commit## Changes to be committed:(暂存里下次将被提交的修改)# (use "git rm --cached ..." to unstage)## new file: readme.txt#
(ysmz4注:本人的"git add readme.txt"执行后报错: warning LF Will be replaced by CRLF in readme.txt.
原因分析:
CRLF -- Carriage-Return Line-Feed 回车换行
就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
这两个ACSII字符不会在屏幕有任何输出,但在Windows中广泛使用来标识一行的结束。而在Linux/UNIX系统中只有换行符。
也就是说在windows中的换行符为 CRLF, 而在linux下的换行符为:LF
使用git来生成一个rails工程后,文件中的换行符为LF, 当执行git add .时,系统提示:LF 将被转换成 CRLF)
好的,文件即然被暂存到暂存区中,我们现在就可以把它提交到仓库里面去:)
<strong>$ git commit -m "project init" #将刚才的修改提交到本地仓库中</strong>[master (root-commit) 8223db3] project init1 files changed, 1 insertions(+), 0 deletions(-)create mode 100644 readme.txt$ git status# On branch masternothing to commit (working directory clean)(现在这个工作目录里没有什么要提交的东东,它是整洁的)
现在你执行一下git log 命令就会看到刚才的提交记录
$ git logcommit 8223db3b064a9826375041c8fea020cb2e3b17d1Author: liuhui998Date: Sat Jan 1 18:12:38 2011 +0800project init
“8223db3b064a9826375041c8fea020cb2e3b17d1”这一串字符就是我们这次创建的提交的名字。看起来是不是很熟,如果经常用电驴的朋友就会发现它就是和电驴里内容标识符一样,都是SHA1串。Git通过对提交内容进行 SHA1 Hash运算,得到它们的SHA1串值,作为每个提交的唯一标识。根据一般的密码学原理来说,如果两个提交的内容不相同,那么它们的名字就不会相同;反之,如果它们的名字相同,就意味着它们的内容也相同。
现在我想改一下仓库里文件的内容,现提交到仓库中去
<strong>$ echo "Git is Cool" >> readme.txt #在文件的最后添加一行</strong>$ git status #查看当前仓库的状态# On branch master# Changed but not updated: (修改了,但是还没有暂存的内容)# (use "git add ..." to update what will be committed)# (use "git checkout -- ..." to discard changes in working directory)## modified: readme.txt#no changes added to commit (use "git add" and/or "git commit -a")(没有修改可以被提交,使用 “git add” 命令添加文件到暂存区,或是使用“git commit -a” 命令强制提交当前目录下的所有文件)
OK,即然我们修改了仓库里被提交的文件,那么我想看一下我们
到底改了哪些地方,再决定是否提交。
<strong>$ git diff #查看仓库里未暂存内容和仓库已提交内容的差异</strong>diff --git a/readme.txt b/readme.txtindex 7b5bbd9..49ec0d6 100644--- a/readme.txt+++ b/readme.txt@@ -1 +1,2 @@hello Git+Git is Cool
很好,正如我们所愿,我们只是在readme.txt的最后一行添加了一行“Git is Cool”。
好的,我们现在再把 readme.txt放到暂存区里:
$ git add readme.txt我们现在看一下仓库的状态:
$ git status# On branch master# Changes to be committed:# (use "git reset HEAD ..." to unstage)## modified: readme.txt#可以提交了:
$ git commit -m "Git is Cool"[master 45ff891] Git is Cool1 files changed, 1 insertions(+), 0 deletions(-)(一个文件被修改,一行插入,零行删除)再看一下新的日志:
$ git logcommit 45ff89198f08365bff32364034aed98126009e44Author: liuhui998Date: Sat Jan 1 18:17:07 2011 +0800Git is Coolcommit 8223db3b064a9826375041c8fea020cb2e3b17d1Author: liuhui998Date: Sat Jan 1 18:12:38 2011 +0800project init
“45ff89198f08365bff32364034aed98126009e44” 这个就是我们刚才提交修改时创建的提交。
- Git 历险记(一)
- Git历险记(一)
- Git历险记(一)
- git 历险记(一)
- Git历险记(一)
- Git历险记(一)
- Git历险记(一):简介
- Git历险记(二)
- Git历险记(三)
- Git历险记(四)
- Git历险记(五)
- Docker历险记(一)
- Git历险记
- Git历险记
- git 历险记
- Git 历险记
- 安卓开发历险记(一)
- Git 历险记(二)—— Git 的安装和配置
- C与指针 笔记
- 无法查找或打开 PDB 文件
- RMAN脚本
- 关于JSP的笔记
- PhotoShop教程:切图那点事儿
- git 历险记(一)
- 第2章、搭建Android的开发环境(从零开始学Android)
- 郁闷的VIM
- mysql中having语句与where语句的用法与区别, 对数据分组的总结
- php 修改mallbuilder注册发送邮件验证的2个问题
- 将uiautomator的case日志输出成xml格式的方式
- 程序员初级需要掌握的一些算法和数据结构
- java list大数据量用addAll
- 在oracle存储过程中执行动态sql